错误:'xxx'不是类型

Error: 'xxx' is not a type

本文关键字:类型 xxx 错误      更新时间:2023-10-16

在此完整代码中:

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;
  }

使用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.

使用clang 3.4-1ubuntu3我得到:

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

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


如果我把有错误的行改成这样,它编译得很干净:

    foo myFoo_ (int dataPin_);  // instance of foo

它正在阅读foo myFoo_ (dataPin_);作为一个函数声明:myFoo_是一个函数,接受dataPin_并返回foo。这就是为什么在( )中需要一个类型名。

要解决这个问题,在构造函数中初始化myFoo_,就像您对dataPin_所做的那样:
bar(const int dataPin) : dataPin_ (dataPin), myFoo_(dataPin) {}

这里你应该添加类型非变量,这是函数签名,它应该有类型非变量。

foo myFoo_ (dataPin_);  // instance of foo