无法理解为什么XCode链接器看不到某些方法
Can't understand why XCode linker doesn't see certain methods
经过多年的学习,我刚刚学会了C++。现在我正在尝试实现一个简单的矩阵类,以便从其他类中使用。在GManNickG的带领下,以下是我的SimpleMatrix
(在"SimpleMatrix.h"中声明):
#pragma once
#include <vector>
template <typename T>
class SimpleMatrix {
unsigned int numCols, numRows;
public:
std::vector<T> data;
SimpleMatrix(unsigned int cols, unsigned int rows) :
numCols(cols),
numRows(rows),
data(numCols * numRows)
{};
T getElement(unsigned int column, unsigned int row);
void setShape(unsigned int column, unsigned int row, const T& initValue);
};
并实现为(在"SimpleMatrix.cpp"中):
#include "SimpleMatrix.h"
template <class T>
T SimpleMatrix<T>::getElement(unsigned int column, unsigned int row) {
return data[row * numCols - 1];
}
template <class T>
void SimpleMatrix<T>::setShape(unsigned int columns, unsigned int rows, const T& initValue) {
numCols = columns;
numRows = rows;
data.assign(columns * rows, initValue);
}
现在,当我从main
中使用SimpleMatrix
时,它可以很好地编译、链接和工作。当我试图从声明为(在"Container.h"中)的对象Container
中使用它时:
#include "SimpleMatrix.h"
class Container {
public:
SimpleMatrix<int> matrix;
Container();
void doStuff();
};
并实现为(在"Container.cpp"中):
#include "Container.h"
#include "SimpleMatrix.h"
void Container::doStuff() {
this->matrix.setShape(2, 2, 0);
this->matrix.getElement(1, 1);
}
Xcode抱怨
体系结构x86_64:的未定义符号
"SimpleMatrix<int>::getElement(unsigned int, unsigned int)", referenced from: Container::doStuff() in Container.o "SimpleMatrix<int>::setShape(unsigned int, unsigned int, int const&)", referenced from: Container::doStuff() in Container.o
ld:找不到体系结构x86_64的符号clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我已经检查了"构建阶段/编译源"设置,所有三个文件都在那里(main.cpp、SimpleMatrix.cpp和Container.cpp)
此代码可能存在许多问题。脑海中浮现的一个问题是缺少SimpleMatrix
的默认构造函数,但这并不是我真正关心的问题。我只是不明白这两种情况之间的根本区别是什么
非常感谢您的帮助。
模板的实现必须在头文件中。
相关文章:
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 看不到文件'SDL2.lib'
- WSL 看不到环境变量
- 为什么我的 FreeRTOS 任务看不到类成员?
- Google Colab 看不到 .so 文件
- 派生类看不到基类成员
- 为什么我看不到字符串?
- CMake 看不到SDL2_PATH环境变量 (Windows)
- OpenMP 任务看不到共享变量的更改
- handleMessage看不到我的类和函数
- 为什么 connect() 函数看不到插槽?
- 模板类看不到继承的模板成员
- 为什么即使链接器找到目标文件,我的程序也看不到函数定义?
- 将 somedialog.h 包含在项目的其他部分中会使编译器看不到 ui_somedialog.h
- SFML - 代码::块看不到 sfml 图形(等)文件
- CMake 看不到源文件,找不到 #includes
- ifstream在OSX上看不到新内容
- 在类模板上覆盖方法,编译器看不到它,只能看到其他重载函数
- 我看不到从 std::queue 中获取元素的方法
- 无法理解为什么XCode链接器看不到某些方法