猿问

错误:请求'..'中的成员'..',这是非类型的

错误:请求'..'中的成员'..',这是非类型的

我有一个带有两个构造函数的类,一个不带参数,另一个带一个参数。


使用带有一个参数的构造函数创建对象可以按预期工作。但是,如果我使用不带参数的构造函数创建对象,我会收到错误。


例如,如果我编译此代码(使用g ++ 4.0.1)...


class Foo

{

  public:

    Foo() {};

    Foo(int a) {};

    void bar() {};

};


int main()

{

  // this works...

  Foo foo1(1);

  foo1.bar();


  // this does not...

  Foo foo2();

  foo2.bar();


  return 0;

}

...我收到以下错误:


nonclass.cpp: In function ‘int main(int, const char**)’:

nonclass.cpp:17: error: request for member ‘bar’ in ‘foo2’, which is of non-class type ‘Foo ()()’

为什么这样,我如何使它工作?


回首忆惘然
浏览 601回答 3
3回答

芜湖不芜

Foo foo2();改成Foo foo2;你得到错误,因为编译器认为Foo foo2()具有名称'foo2'的函数声明和返回类型'Foo'。但在这种情况下,如果我们改为Foo foo2,编译器可能会显示错误 " call of overloaded ‘Foo()’ is ambiguous"。

翻过高山走不出你

仅供记录..它实际上不是您的代码的解决方案,但是当错误地访问指向的类实例的方法时,我有相同的错误消息myPointerToClass,例如MyClass* myPointerToClass = new MyClass();myPointerToClass.aMethodOfThatClass();哪里myPointerToClass->aMethodOfThatClass();显然是正确的。

宝慕林4294392

添加到知识库,我得到了相同的错误if(class_iter->num == *int_iter)尽管IDE为我提供了class_iter的正确成员。显然,问题是"anything"::iterator没有一个成员被叫,num所以我需要取消引用它。这不是这样的:if(*class_iter->num == *int_iter)...很明显。我最终解决了这个问题:if((*class_iter)->num == *int_iter)我希望这可以帮助那些以我的方式遇到这个问题的人。
随时随地看视频慕课网APP
我要回答