C++ 在另一个C++;
我试图从myClass2(作为中间类)为变量myVar(位于myClass1内部)设置一个值。然而,我得到一个编译错误。 以下是我迄今为止的尝试: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(
#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;
}