Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;错误:应为类型说明符_C++ - Fatal编程技术网

C++ C++;错误:应为类型说明符

C++ C++;错误:应为类型说明符,c++,C++,当我尝试像这样使用LoggerStream时,我得到了“预期的类型说明符”: const LoggerStream记录器(L“测试组件”) 这里是我尝试使用日志流的地方: #include "Logger.h" #include "TestComponent.h" namespace ophRuntime { struct TestComponent::TestComponentImpl { private: LoggerStream logger(

当我尝试像这样使用
LoggerStream
时,我得到了“预期的类型说明符”:

const LoggerStream记录器(L“测试组件”)

这里是我尝试使用
日志流的地方:

#include "Logger.h"
#include "TestComponent.h"

namespace ophRuntime {
    struct TestComponent::TestComponentImpl {


        private:
        LoggerStream logger(L"Test Component");

        NO_COPY_OR_ASSIGN(TestComponentImpl);
    };

    TestComponent::TestComponent() : impl(new TestComponentImpl()) {

    }

    bool TestComponent::Init() {

    }
}
const ophRuntime::LoggerStream logger(L"Test Component");

LoggerStream
位于命名空间
ophRuntime
中,因此您的定义必须

const ophRuntime::LoggerStream logger(L"Test Component");

当使用类
LoggerStream
时,需要使用命名空间名称
ophRuntime

#include "Logger.h"
#include "TestComponent.h"

namespace ophRuntime {
    struct TestComponent::TestComponentImpl {


        private:
        LoggerStream logger(L"Test Component");

        NO_COPY_OR_ASSIGN(TestComponentImpl);
    };

    TestComponent::TestComponent() : impl(new TestComponentImpl()) {

    }

    bool TestComponent::Init() {

    }
}
const ophRuntime::LoggerStream logger(L"Test Component");

你提到过名称空间吗?您需要编写以下内容之一:

using ophRuntime::LoggerStream;
const LoggerStream logger(L"Test Component");


不能像这样构造类成员:-

  struct TestComponent::TestComponentImpl 
  {

  private:
        LoggerStream logger(L"Test Component");
相反,在构造函数中使用初始化列表,如下所示:

struct TestComponent::TestComponentImpl 
{
   LoggerStream logger;

    TestComponent::TestComponent() : impl(new TestComponentImpl()),
                                     logger("L"Test Component")
    {   
    }

    ...    
}

我认为您已经违反了,因为编译器认为
logger
必须是一个函数,并且它抱怨
L“Test Component”
不是参数的类型说明符。

logger的声明已经在运行时命名空间中。尽管如此,我还是尝试添加这样一个明确的规范,但没有任何效果。显示生成错误的代码会很有帮助。您是否忘记了添加“Logger.h”
,例如。。。我看不出Logger_WIN与此有什么关系:编译它不会出错吧?是吗?@Roddy我添加了代码。其他地方没有错误。现在我们正在取得进展;-)检查我的答案。啊,该死的-我已经在这一点上对自己进行了重点教育(最烦人的解析),所以我没有被它困住。。。哈哈,最好的计划等等。谢谢你的毅力:FWWI我在C++ 11上,所以类初始化是可能的()。我只是用{}替换了(),一切都很好。