【问题标题】:error LNK2019: unresolved external symbol "public: __thiscall : constructor issue错误 LNK2019:未解析的外部符号“公共:__thiscall:构造函数问题
【发布时间】: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


【解决方案1】:

问题似乎是有两个项目,一个找不到另一个的编译类。

我将尝试解释在 Visual Studio 中使用一个项目作为库和一个作为应用程序的过程。

首先在库项目中右键单击->属性,然后在常规选项卡下,配置类型应为静态库(.lib)。

然后在应用程序项目中再次转到属性,选择链接器->输入,然后在文本框附加库中,使用箭头选择编辑。然后在底部的第一个项目创建的库的完整或相对路径(您可以先构建它以验证位置)。

【讨论】:

  • 如果它有效,则您可以接受此答案,因此不再将其视为未回答的问题。
猜你喜欢
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 2018-11-13
  • 2023-03-28
  • 2015-05-28
  • 1970-01-01
相关资源
最近更新 更多