【发布时间】:2015-04-23 13:38:39
【问题描述】:
我想测试以下几行,但出现 LNK2019 错误,指出我的构造函数中存在错误。如果构造函数实现从源文件移动到头文件,它就可以工作......
dVector 是 std::vector 的 typedef
错误 LNK2019:未解析的外部符号“public: __thiscall Grid::Grid(int,class std::vector > &,class std::vector > &,class std::vector > &)”强>
//main.cpp
#include <Math/PDE/Grid.h>
#include <vector>
int main(){
dVector oLowerBounds(2);
dVector oUpperBounds(2);
int lNumberOfStates(2);
dVector oMArkovianStates(2);
std::vector<int> oGridSizes(2);
Grid * pGrid= new Grid(lNumberOfStates, oLowerBounds, oUpperBounds, oGridSizes);
return 0;
}
//Grid.h
#ifndef GRID_H
#define GRID_H
#pragma once
#include <Math/Matrix/Matrix.h>
#include<vector>
class Grid
{
public:
Grid(int inGridDimension,
dVector &inLowerBounds,
dVector &inUpperBounds,
std::vector<int> &inGridSizes);
double getGridElement(int index1, int index2){return mGrid[index1][index2];};
void buildUniformGrid();
bool getIsUniformGrid(int index){return mIsUniformGrid[index];};
int getGridSize(int index);
~Grid(void);
private:
int mGridDimension;
std::vector<bool> mIsUniformGrid;
std::vector<double> mLowerBounds;
std::vector<double> mUpperBounds;
std::vector<int> mGridSizes;
std::vector<std::vector<double>> mGrid;
};
#endif
//Grid.cpp
#include <Math/PDE/Grid.h>
Grid::Grid(int inGridDimension,
std::vector<double> &inLowerBounds,
std::vector<double> &inUpperBounds,
std::vector<int> &inGridSizes):
mGridDimension(inGridDimension),
mLowerBounds(inLowerBounds),
mUpperBounds(inUpperBounds),
mGridSizes(inGridSizes)
{
}
Grid::~Grid(void)
{
}
【问题讨论】:
-
编译过程中是否也包含了Grid.cpp文件?
-
手柄包含在一个项目中。另一个项目中的 main.ccp。我成功编译了第一个包含 Grip 类的项目。当我编译包含 main.cpp 的第二个项目时,出现此错误
-
出现问题是因为带有main.cpp的项目无法访问编译好的Grid对象。您可以将 Grid.cpp 和 Grid.h 添加到主项目中,也可以将包含 Grid 的项目编译为静态或共享库,并将其与主项目链接。
-
哦,我明白了!谢谢你 。我以前从来没有这样做过,你知道如何链接它们吗?或者你能给我正确的方向吗?
-
您是否在使用 Visual Studio、代码块或普通 Makefile 之类的工具?编辑:将它们添加到单个项目中可能更容易,仅当您想要共享代码或某些部分可以在运行时换出时,使用库才有用。
标签: c++ constructor lnk2019