std::vector<std::vector<float>> 在头文件中抛出错误 LNK1120
std::vector<std::vector<float>> in header file throws error LNK1120
我想包含我自己的头文件,但是 vector> 抛出错误
matrix.cpp
#include <vector>
class Matrix
{
public:
std::vector<std::vector<float>> data;
Matrix(std::vector<std::vector<float>> d_data = { {} })
{
data = d_data;
}
};
matrix.h
#ifndef MATRIX_H
#define MATRIX_H
#include <vector>
class Matrix {
public:
std::vector<std::vector<float>> data;
Matrix(std::vector<std::vector<float>> d_data = { {} });
};
#endif
matrixc++.cpp
#include <C:\Users\Matteo\source\repos\matrixc++\matrixc++\Matrix.h>
#include <vector>
int main()
{
Matrix abc({{1,2},{2,1}});
return 0;
}
出现以下错误:
matrixc++.obj : error LNK2019: unresolved external symbol "public: __cdecl Matrix::Matrix(class std::vector<class std::vector<float,class std::allocator >,class std::allocator<class std::vector<float,class std::allocator > > >)" (??0Matrix@@QEAA@V?$vector@V?$vector@MV?$allocator@M@std@@@std@@V?$allocator@V?$vector@MV?$allocator@M@std@@@std@@@2@@std@@@Z) referenced in function main
问题 是您或多或少地复制粘贴了 class 定义到源文件 matrix.cpp
。也就是说,您定义了 class Matrix
两次。一次在 header 中,第二次在源文件中。
要解决这只是在源文件中提供构造函数Matrix::Matrix(std::vector<std::vector<float>>)
的实现,如下所示:
matrix.cpp
#include <C:\Users\Matteo\source\repos\matrixc++\matrixc++\Matrix.h>
//implement only the constructor
Matrix::Matrix(std::vector<std::vector<float>> d_data): data(d_data)
^^^^^^^^^^^^ use constructor initializer list
{
}
matrix.h
#ifndef MATRIX_H
#define MATRIX_H
#include <vector>
class Matrix {
public:
std::vector<std::vector<float>> data;
Matrix(std::vector<std::vector<float>> d_data = { {} });
};
#endif
我想包含我自己的头文件,但是 vector
matrix.cpp
#include <vector>
class Matrix
{
public:
std::vector<std::vector<float>> data;
Matrix(std::vector<std::vector<float>> d_data = { {} })
{
data = d_data;
}
};
matrix.h
#ifndef MATRIX_H
#define MATRIX_H
#include <vector>
class Matrix {
public:
std::vector<std::vector<float>> data;
Matrix(std::vector<std::vector<float>> d_data = { {} });
};
#endif
matrixc++.cpp
#include <C:\Users\Matteo\source\repos\matrixc++\matrixc++\Matrix.h>
#include <vector>
int main()
{
Matrix abc({{1,2},{2,1}});
return 0;
}
出现以下错误:
matrixc++.obj : error LNK2019: unresolved external symbol "public: __cdecl Matrix::Matrix(class std::vector<class std::vector<float,class std::allocator >,class std::allocator<class std::vector<float,class std::allocator > > >)" (??0Matrix@@QEAA@V?$vector@V?$vector@MV?$allocator@M@std@@@std@@V?$allocator@V?$vector@MV?$allocator@M@std@@@std@@@2@@std@@@Z) referenced in function main
问题 是您或多或少地复制粘贴了 class 定义到源文件 matrix.cpp
。也就是说,您定义了 class Matrix
两次。一次在 header 中,第二次在源文件中。
要解决这只是在源文件中提供构造函数Matrix::Matrix(std::vector<std::vector<float>>)
的实现,如下所示:
matrix.cpp
#include <C:\Users\Matteo\source\repos\matrixc++\matrixc++\Matrix.h>
//implement only the constructor
Matrix::Matrix(std::vector<std::vector<float>> d_data): data(d_data)
^^^^^^^^^^^^ use constructor initializer list
{
}
matrix.h
#ifndef MATRIX_H
#define MATRIX_H
#include <vector>
class Matrix {
public:
std::vector<std::vector<float>> data;
Matrix(std::vector<std::vector<float>> d_data = { {} });
};
#endif