C++ 在另一个C++;

C++ 在另一个C++;,c++,visual-studio,class,methods,C++,Visual Studio,Class,Methods,我试图从myClass2(作为中间类)为变量myVar(位于myClass1内部)设置一个值。然而,我得到一个编译错误。 以下是我迄今为止的尝试: #include <iostream> using namespace std; class myClass1{ int myVar = 5; public: myClass1(); myClass1(int x){ myVar = x; } int getmyVar(

我试图从myClass2(作为中间类)为变量myVar(位于myClass1内部)设置一个值。然而,我得到一个编译错误。 以下是我迄今为止的尝试:

#include <iostream>
using namespace std;
class myClass1{

    int myVar = 5;
    public:
        myClass1();

        myClass1(int x){ myVar = x; }

        int getmyVar(){ return myVar; }
        void setmyVar(int y){ myVar = y; }


};

class myClass2{

    int myScore = 10;
    myClass1 class1;
public:
    myClass2();

    myClass2(int x){ myScore = x; }

    int getmyScore(){ return myScore; }
    void setmyScore(int y){ myScore = y; }
    myClass1 getmyClass1(){ return class1; }


};

int main(){

    myClass2 class2;
    class2.getmyClass1().setmyVar(40);

    return 0;
}

请参见此处标记的更改

#include <iostream>
using namespace std;
class myClass1{

    int myVar = 5;
    public:
    myClass1() {} // HERE

        myClass1(int x){ myVar = x; }

        int getmyVar(){ return myVar; }
        void setmyVar(int y){ myVar = y; }


};

class myClass2{

    int myScore = 10;
    myClass1 class1;
public:
    myClass2() {} // HERE

    myClass2(int x){ myScore = x; }

    int getmyScore(){ return myScore; }
    void setmyScore(int y){ myScore = y; }
    myClass1& getmyClass1(){ return class1; }  // HERE


};

int main(){

    myClass2 class2;
    class2.getmyClass1().setmyVar(40);

    return 0;
}
#包括
使用名称空间std;
类别myClass1{
int-myVar=5;
公众:
myClass1(){}//这里
myClass1(intx){myVar=x;}
int getmyVar(){return myVar;}
void setmyVar(int y){myVar=y;}
};
类别myClass2{
int myScore=10;
myClass1;
公众:
myClass2(){}//HERE
myClass2(intx){myScore=x;}
int getmyScore(){return myScore;}
void setmyScore(int y){myScore=y;}
myClass1&getmyClass1(){return class1;}//HERE
};
int main(){
myClass2 class2;
class2.getmyClass1().setmyVar(40);
返回0;
}

将方法定义更改为myClass1&getmyClass1(){…}顺便说一句,一旦从
getmyClass1
返回引用,将
class1
成员
设为私有将变得毫无意义。不使用方法返回(非常量)引用,您可以将其公开为well@BoBTFish我得到了这个错误:“错误1错误LNK2019:未解析的外部符号”public:u thiscall myClass2::myClass2(void)”(??0周期类2@@QAE@XZ)在函数\u main C:\Users\Ahmed\Desktop\VB\Test2\Test2\main.obj Test2”中引用您忘记定义默认构造函数了。如果删除您认为是问题所在的行,您将遇到相同的错误。@molbdnilo,我需要添加它们吗?我使用了myClass1();和myClass2();作为能够创建它们的构造函数,它们的属性有默认值。非常感谢,所以我想主要的问题是我忘记在myClass2()和myClass1()之后添加{},对吗?问题是这些函数是声明的,但没有定义。基本上,你说“这个函数应该存在”,但实际上它并不存在!另一个解决方案是使它们具有默认定义:
myClass1()=default我怀疑你的答案会被否决,因为你没有真正解释这个问题,或者你的修复程序起作用的原因。一个好的答案可以帮助提问者理解,而不仅仅是提供一些可以复制/粘贴的内容。这就是说,以低于票数的方式开车是不礼貌的!除了没有解释,混乱的意图和假装被封装,当它不是,我不理解反对票;)我有个问题。myClass1()和myClass2()是构造函数,如果我不定义它们,这是否意味着编译器采用standardt构造函数?还是说class1和class2不存在?
#include <iostream>
using namespace std;
class myClass1{

    int myVar = 5;
    public:
    myClass1() {} // HERE

        myClass1(int x){ myVar = x; }

        int getmyVar(){ return myVar; }
        void setmyVar(int y){ myVar = y; }


};

class myClass2{

    int myScore = 10;
    myClass1 class1;
public:
    myClass2() {} // HERE

    myClass2(int x){ myScore = x; }

    int getmyScore(){ return myScore; }
    void setmyScore(int y){ myScore = y; }
    myClass1& getmyClass1(){ return class1; }  // HERE


};

int main(){

    myClass2 class2;
    class2.getmyClass1().setmyVar(40);

    return 0;
}