我在OpenSUSE和Boost 1.55上使用QT-Creator。所需的所有二进制文件均已构建。

该程序很容易测试Boost线程是否正常工作。只声明一个线程。

生成程序时,出现以下错误

/home/esys/Documents/Boost/headers/boost/thread/detail/thread.hpp:117: error: expression cannot be used as a function
                 f();
                 ^


在thread.hpp中,它看起来像这样:

void run()
        {
            f();// line 117
        }

    private:
        F f;
    };


我对此很困惑,因为问题似乎是标题本身的代码,而不是构建设置的东西!

如何解决这个问题?当然,我可以更改为另一个Boost版本,但是对此错误感到有些好奇。这是很大的Boost库,伙计!

任何想法,将不胜感激 :)

最佳答案

我可以reproduce your issue,您的线程的声明:

boost::thread *p = new boost::thread("thread1");


无效:构造函数需要可调用的对象(例如函子),而不是string
您应该查看boost documentation以获得更多信息。

(错误消息实际上非常明确:它告诉您表达式_字符串“ thread1” _是不可调用的)

注意:

如果您的编译器支持C ++ 11,请考虑使用std::thread作为boost::thread的替代方案。

关于c++ - Boost线程中出现错误“无法将表达式用作函数”吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24973592/

10-12 14:55
查看更多