错误:'xxx'不是类型

Nic*_*mon 1 c++ compiler-errors

在这个完整的代码中:

class foo
{
  public:
    foo(const int pin);
};

class bar {
  public:
    // Constructor
    bar(const int dataPin) : dataPin_ (dataPin) { }

  private:
    const int dataPin_;
    foo myFoo_ (dataPin_);  // instance of foo
};

int main (void)
  {
  return 0;
  }
Run Code Online (Sandbox Code Playgroud)

使用g ++ 4.8.4我收到错误:

g++ -Wall -c "test.cpp" (in directory: /home/nick/Development)
test.cpp:14:17: error: ‘dataPin_’ is not a type
     foo myFoo_ (dataPin_);  // instance of foo
                 ^
Compilation failed.
Run Code Online (Sandbox Code Playgroud)

使用clang 3.4-1ubuntu3我得到:

test.cpp:14:17: error: unknown type name 'dataPin_'
    foo myFoo_ (dataPin_);  // instance of foo
                ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

为什么要在这里输入类型?这是试图创建foo一个类变量的实例bar.变量dataPin_直接在上面声明.


如果我将带有错误的行更改为this,它会干净地编译:

    foo myFoo_ (int dataPin_);  // instance of foo
Run Code Online (Sandbox Code Playgroud)

mel*_*ene 7

foo myFoo_ (dataPin_);作为函数声明读取:myFoo_是一个函数接受dataPin_并返回a foo.这就是为什么它期待一个类型名称( ).

要解决此问题,请myFoo_在构造函数中初始化,就像使用dataPin_:

bar(const int dataPin) : dataPin_ (dataPin), myFoo_(dataPin) {}
Run Code Online (Sandbox Code Playgroud)