对象构造中的 C++ 错误。未解析的外部符号
C++ Error in object construction. Unresolved External Symbol
我有三个文件,一个用于测试我的函数的 main.cpp 文件,一个 class 的头文件,以及声明我的对象和成员的 cpp 文件。
我正在尝试在主文件中构造我的对象 Matrix
并收到错误:Error: LNK2019 unresolved external symbol "public: __thiscall Matrix::Matrix(int,int)" (??0Matrix@@QAE@HH@Z) referenced in function _main Matrix Project
.
我只能假设这意味着我的构造函数有问题。我按如下方式使用它,但它们都不起作用:
Matrix* matrix = new Matrix(2, 3);
Matrix test = Matrix(2, 3);
构造函数在*.h文件中声明如下:
Matrix(int numRows, int numCols);
然后在*.cpp文件中声明如下:
public:
Matrix(int numRows, int numCols) {
rows = numRows;
cols = numCols;
arr = new double*[numCols];
for (int i = 0; i < numRows; ++i) {
for (int x = 0; x < numCols; ++x) {
arr[i][x] = 0;
}
}
}
感谢任何帮助。我确定我错过了一些愚蠢的东西。
提前致谢!
[编辑]
为了提供信息,我想我会说变量 rows
、cols
和 arr
都在构造函数上方声明为 private
class.
的成员
在 .cpp 文件中,您应该将 definition 方法的 declared 放在头文件 (.h) 中.因此,您的 .cpp 文件应如下所示:
Matrix::Matrix(int numRows, int numCols) { }
您正在做的是复制 .cpp 文件中的 class 定义,这就是为什么会出现链接错误。
也许我应该发布我的全部代码,这样你们中的一个人就可以告诉我:
A。在我的 *.cpp 文件中重新定义 class 和
时会收到错误消息
B。需要在 *.cpp 文件中 include
我的 *.h 文件,以便它知道从哪里获得 class 声明。很抱歉浪费你的时间。
我有三个文件,一个用于测试我的函数的 main.cpp 文件,一个 class 的头文件,以及声明我的对象和成员的 cpp 文件。
我正在尝试在主文件中构造我的对象 Matrix
并收到错误:Error: LNK2019 unresolved external symbol "public: __thiscall Matrix::Matrix(int,int)" (??0Matrix@@QAE@HH@Z) referenced in function _main Matrix Project
.
我只能假设这意味着我的构造函数有问题。我按如下方式使用它,但它们都不起作用:
Matrix* matrix = new Matrix(2, 3);
Matrix test = Matrix(2, 3);
构造函数在*.h文件中声明如下:
Matrix(int numRows, int numCols);
然后在*.cpp文件中声明如下:
public:
Matrix(int numRows, int numCols) {
rows = numRows;
cols = numCols;
arr = new double*[numCols];
for (int i = 0; i < numRows; ++i) {
for (int x = 0; x < numCols; ++x) {
arr[i][x] = 0;
}
}
}
感谢任何帮助。我确定我错过了一些愚蠢的东西。
提前致谢!
[编辑]
为了提供信息,我想我会说变量 rows
、cols
和 arr
都在构造函数上方声明为 private
class.
在 .cpp 文件中,您应该将 definition 方法的 declared 放在头文件 (.h) 中.因此,您的 .cpp 文件应如下所示:
Matrix::Matrix(int numRows, int numCols) { }
您正在做的是复制 .cpp 文件中的 class 定义,这就是为什么会出现链接错误。
也许我应该发布我的全部代码,这样你们中的一个人就可以告诉我:
A。在我的 *.cpp 文件中重新定义 class 和
时会收到错误消息B。需要在 *.cpp 文件中 include
我的 *.h 文件,以便它知道从哪里获得 class 声明。很抱歉浪费你的时间。