0

有人可以向我解释为什么以下给我一个错误,以及如何解决。

编译错误是:

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

第二种方法违背了通过引用传递数据的目的,因此是不可取的。

我希望能够通过引用传递一个类,作为一个常量,并且能够使用一些 getter 方法而不必创建本地副本。

4

3 回答 3

5

您的变量是const并且您正在调用非常量成员函数。

重新定义你的成员函数int getData() const {,你应该没问题。

正如 Ivaylo Strandjev 所说,用于src访问对象。

于 2013-10-01T13:52:52.730 回答
3
int getDataFromClass(const test& src){
    return test.getData();
}

在这里你应该使用src它作为它的变量名。test是类名,编译器抱怨您尝试在其上调用方法。

于 2013-10-01T13:52:42.857 回答
2

因为在

int getDataFromClass(const test& src){
    return test.getData();
}

test是一个类型,而不是一个对象。

于 2013-10-01T13:54:49.440 回答