C++ C++;应在';之前使用主表达式';代币

C++ C++;应在';之前使用主表达式';代币,c++,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

有人能给我解释一下为什么下面给出了一个错误,以及如何修复

编译错误是:

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方法,而不必创建本地副本

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

这里您应该使用
src
,因为它是变量名
test
是类名,编译器会抱怨您试图对其调用方法。

您的变量是
const
,您正在调用非const成员函数

将您的成员函数重新定义为
intgetdata()const{
,您应该可以

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

因为

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

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

test
是一个类型。您需要一个该类型的对象。
返回src.getData();
另外,将
getData
声明为const。您的第一个短语没有回答特定的错误消息,第二个短语也没有解决问题。