gpt4 book ai didi

c++ - 体系结构 x86_64 c++ 的 undefined symbol

转载 作者:行者123 更新时间:2023-11-28 06:41:27 25 4
gpt4 key购买 nike

我试图在 C++ 中创建一个自定义的“矩阵”类,但遇到了一个我无法理解的“体系结构 x86_64 的 undefined symbol :”错误。我的相关代码是-

标题

#ifndef CORE_H
#define CORE_H
#include <stdint.h>

class Size
{
public:
Size(const uint64_t nrows, const uint64_t ncols, const uint64_t nframes);

uint64_t rows;
uint64_t cols;
uint64_t frames;
};

template <typename T>
class Matrix
{
public:
Matrix(const uint64_t rows, const uint64_t cols, const uint64_t frames);
Matrix(const uint64_t rows, const uint64_t cols, const uint64_t frames, T *data);

void print();

private:
Size sz;
T *_data;
};

#endif //CORE_H

来源

#include <string.h>
#include <cstdlib>
#include <stdio.h>

#include "core.h"

Size::Size(const uint64_t nrows, const uint64_t ncols, const uint64_t nframes)
{
rows = nrows;
cols = ncols;
frames = nframes;
}

template <typename T>
Matrix<T>::Matrix(const uint64_t rows, const uint64_t cols, const uint64_t frames)
{
Matrix<T>(rows, cols, frames, malloc(rows * cols * frames * sizeof(T)));
}

template <typename T>
Matrix<T>::Matrix(const uint64_t rows, const uint64_t cols, const uint64_t frames, T *data)
{
sz = Size(rows, cols, frames);
_data = data;
}

template <typename T>
void Matrix<T>::print()
{
printf("[");
for (uint64_t f = 0; f < sz.frames; f++) {
printf("[");
for (uint64_t r = 0; r < sz.rows; r++) {
for (uint64_t c = 0; c < sz.cols; c++) {
printf("%.3f,", element(r, c, f));
}
printf("\n");
}
printf("]\n");
}
printf("]\n");
}

测试

#include "core.h"

int main(int argc, char *argv[])
{
int data[] = { 1, 2, 3, 4, 5, 6, 7, 8};
Matrix<int> mat(2, 2, 2, data);
mat.print();
return 0;
}

错误

Undefined symbols for architecture x86_64:
"Matrix<int>::print()", referenced from:
_main in rand.cpp.o
"Matrix<int>::Matrix(int, int, int, int*)", referenced from:
_main in rand.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [examples/rand] Error 1
make[1]: *** [examples/CMakeFiles/rand.dir/all] Error 2
make: *** [all] Error 2

我确定它很小,但我无法弄清楚。非常感谢任何帮助!

最佳答案

模板函数(包括模板类的成员函数)需要在头文件中实现,这样它们的定义(不仅仅是声明)在可能使用它们的所有翻译单元中都是可见的。参见 this SO question获取更多信息。

将构造函数和 print 函数的定义移动到头文件中,在 Matrix 类模板的定义下方。

关于c++ - 体系结构 x86_64 c++ 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com