C ++在'。'之前期待主表达式代币

时间:2013-10-01 13:50:58

标签: c++

有人可以向我解释为什么以下内容会给我一个错误,以及如何修复。

编译错误是:

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方法而无需创建本地副本。

3 个答案:

答案 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是一种类型,而不是对象。