错误:请求会员'..'在'..'中是非班级类型
我有一个带有两个构造函数的类,一个不接受任何参数,一个接受一个参数。错误:请求会员'..'在'..'中是非班级类型
使用带有一个参数的构造函数创建对象将按预期方式工作。但是,如果我使用不带参数的构造函数创建对象,则会出现错误。
举例来说,如果我编译这段代码(使用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()()’
这是为什么,和我如何使它工作?
Foo foo2();
变化
Foo foo2;
你得到的错误,因为编译器认为的
Foo foo2()
与名称 'foo2的' 和返回类型 '富' 函数声明。
但是在这种情况下,如果我们更改为Foo foo2
,编译器可能会显示错误" call of overloaded ‘Foo()’ is ambiguous"
。
只是为了记录..
它实际上不是你的代码的解决方案,但我有错误的时候访问类实例的指向myPointerToClass
,例如方法相同的错误信息
MyClass* myPointerToClass = new MyClass();
myPointerToClass.aMethodOfThatClass();
其中
myPointerToClass->aMethodOfThatClass();
显然是正确的。
添加到的知识基础,我得到了同样的错误
if(class_iter->num == *int_iter)
即使IDE给了我正确的成员class_iter。很显然,问题是"anything"::iterator
没有一个名为num
的成员,所以我需要对其进行解引用。这不工作是这样的:
if(*class_iter->num == *int_iter)
...显然。我最终解决了这个问题:
if((*class_iter)->num == *int_iter)
我希望这可以帮助那些以我的方式来解决这个问题的人。
我有一个类似的错误,似乎编译器误解了没有参数的构造函数的调用。我把它从变量的声明是这样去除括号,在你的代码的东西的工作:不需要
class Foo
{
public:
Foo() {};
Foo(int a) {};
void bar() {};
};
int main()
{
// this works...
Foo foo1(1);
foo1.bar();
// this does not...
Foo foo2; // Without "()"
foo2.bar();
return 0;
}
括号实例化一个类的对象,当你不打算使用参数化的构造函数。
只需使用Foo foo2;
它会工作。
我遇到了,我得到了错误信息,并有
Foo foo(Bar());
,并基本上是试图在一个临时酒吧对象到富构造函数传递的情况。原来,编译器翻译这
Foo foo(Bar(*)());
就是一个函数声明,其名是foo,它返回一个Foo,它接受一个参数 - 一个函数指针返回酒吧0参数。在通过像这样的临时工时,最好使用Bar{}
而不是Bar()
来消除歧义。
添加我的错误,我已经试过:
Foo.low[i]
相反的:
Foo[i].low
如果你想声明没有参数的新物质(明知对象有默认参数)不写
type substance1();
但
type substance;
相关:http://stackoverflow.com/q/2318650/69537 – Meysam 2012-08-06 06:24:35