我已经使用这个模板来创建我的类来存储程序各个部分的数据。
//Classs that DOES NOT work
//"MiningPars.h"
#pragma once
#ifndef MININGPAR_H
#define MININGPAR_H
#include <iostream>
#include <fstream>
using namespace std;
class MiningPars
{
public:
int NumYears;
double iRate;
int MaxMineCap;
int MaxMillCap;
int SinkRate;
double ReclaimCost;
double PitSlope;
public:
MiningPars();
MiningPars(int numYears,double irate,int maxMineCap,int maxMillCap,
int sinkRate, double reclaimCost, double pitSlope): NumYears(numYears),
iRate(irate),MaxMineCap(maxMineCap),MaxMillCap(maxMillCap),SinkRate(sinkRate),
ReclaimCost(reclaimCost),PitSlope(pitSlope) {}
};
#endif
当我刚宣布一个新的挖掘标准时,它给了我错误
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall MiningPars::MiningPars(void)" (??0MiningPars@@QAE@XZ) referenced in function "void __cdecl `dynamic initializer for 'par''(void)" (??__Epar@@YAXXZ)
即。我的代码看起来像这样:
#include "MiningPars.h"
MiningPars par;//Error
vector <PredecessorBlock> PREDS;//is okay
void main()
{
par.iRate = .015;
//... etc.
}
大多数MSDN和其他谷歌搜索都说我没有正确宣布或者我没有添加适当的依赖,但它与我创建另一个类的格式相同。我可以在这里看到我的其他工作的一个例子:
//Classs that works
#pragma once
#ifndef PREDECESSOR_H
#define PREDECESSOR_H
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class PredecessorBlock
{
public:
int BLOCKID;
vector <int> PREDS_IDS;
int PredCount;
public:
PredecessorBlock();
PredecessorBlock(int blockID,vector<int>predsids,
int predcount) : BLOCKID(blockID),
PREDS_IDS(predsids), PredCount(predcount)
{}
};
#endif
所以这对我来说很困惑。我感谢您提供的任何建议
答案 0 :(得分:1)
main.obj:错误LNK2019:未解析的外部符号“public:__thiscall MiningPars :: MiningPars(void)”
Linker抱怨没有为MiningPars
提供默认构造函数定义。
class MiningPars
{
...
MiningPars(); // This is declaration.
// Have you forgotten to provide the definition of it
// in the source file ?
并且
MiningPars par;
上面的语句调用默认构造函数。如果定义为空,则执行 -
MiningPars() {}
在类定义中的就像你为参数化构造函数所做的那样。
答案 1 :(得分:0)
写作时
MiningPars par;
在堆栈上创建类型为MiningPars
的par对象。要创建一个对象,将调用构造函数(在本例中为默认值,即没有参数的构造函数),但不要在MiningPars
类中定义构造函数。
要解决此问题,请在类cpp文件中定义构造函数,或者如果构造函数不需要执行任何操作,则可以在头文件中编写空内联定义:
class MiningPars
{
public:
MiningPars() {}
...
};
或者只是不声明默认构造函数,编译器会为你生成一个空构造函数。
答案 2 :(得分:0)
我同意马赫什 在你的班级里面 MiningPars()的 {} 强>