【发布时间】:2019-08-11 05:43:34
【问题描述】:
我正在尝试为来自 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;
}
错误是:
Error 1 error LNK2019: unresolved external symbol "public: __thiscall myClass2::myClass2(void)" (??0myClass2@@QAE@XZ) referenced in function _main C:\Users\Ahmed\Desktop\VB\Test2\Test2\Main.obj Test2
【问题讨论】:
-
将方法定义改为myClass1& getmyClass1(){...}
-
顺便说一句,一旦您从
getmyClass1返回引用,将class1成员设为private将变得毫无意义。除了使用方法返回(非常量)引用,您也可以将其公开 -
@BoBTFish 我收到此错误:“错误 1 错误 LNK2019:无法解析的外部符号“公共:__thiscall myClass2::myClass2(void)”(??0myClass2@@QAE@XZ) 在函数 _main 中引用C:\Users\Ahmed\Desktop\VB\Test2\Test2\Main.obj Test2"
-
您忘记定义默认构造函数。如果删除您认为是问题的行,您将遇到同样的错误。
-
@molbdnilo,我需要添加它们吗?我用过 myClass1();和 myClass2();作为能够创建它们的构造函数,它们的属性具有默认值。
标签: c++ visual-studio class methods