有人可以向我解释为什么以下内容会给我一个错误,以及如何修复。
编译错误是:
error: expected primary-expression before ‘.’ token
简化的类和方法:
class test{
private:
int data;
public:
test() : data(1){}
test(const test& copy):data(copy.data){} //copy constructor
int getData(){
return data;
}
};
此方法不会像这样编译:
int getDataFromClass(const test& src){
return test.getData();
}
但它确实喜欢这个
int getDataFromClass(const test& src){
test t = test(src);
return t.getData();
}
第二种方法违背了通过引用传递数据的目的,因此是不可取的。
我希望能够通过引用传递一个类作为const,并且能够使用一些getter方法而无需创建本地副本。
答案 0 :(得分:5)
您的变量是const
,并且您正在调用非const成员函数。
将您的会员功能重新定义为int getData() const {
,您应该没事。
正如Ivaylo Strandjev所说,使用src
来访问该对象。
答案 1 :(得分:3)
int getDataFromClass(const test& src){
return test.getData();
}
在这里你应该使用src
作为变量名称。 test
是类名,编译器抱怨您尝试在其上调用方法。
答案 2 :(得分:2)
因为在
int getDataFromClass(const test& src){
return test.getData();
}
test
是一种类型,而不是对象。