我在Visual C ++ 6上遇到了这个奇怪的链接器错误(我没有选择该工具)。我甚至不知道从哪里开始看这个(我的C ++经验有限)。这些是错误:
CScripting.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall CScripting::~CScripting(void)" (??1CScripting@@UAE@XZ)
CPythonPg.obj : error LNK2001: unresolved external symbol "private: static struct _object * CPythonPg::pyPgEnv" (?pyPgEnv@CPythonPm@@0PAU_object@@A)
这是 CPythonPg.h :
#ifndef _CPYTHONPG_H_
#define _CPYTHONPG_H_
#include <sstream>
#include <Python.h>
#include "pgt.h"
using namespace std;
class CPythonPg {
private:
static PyObject* pyPgEnv;
public:
CPythonPg();
~CPythonPg();
protected:
static PyObject* getPyPgEnv(PGTYPE* pgt1, PGTYPE* pgt2);
};
#endif
这是 CSripting.h :(我没有创建这个类,除了将实例添加到我的类CPythonPg之外我无法更改它)
#ifndef _CSCRIPTING_H_
#define _CSCRIPTING_H_
#include <string>
#include <vector>
#include <map>
#include <set>
#include <exception>
#include <sstream>
#include <fstream>
#include <locale>
#include <stdlib.h>
#include <direct.h>
#include <windows.h>
#include <io.h>
#include "pgt.h"
class CPythonPg; // added for python functionality
using namespace std;
class CScripting {
private:
string sMod;
string sCust;
string sProf;
string sScript;
CPythonPg* pyInst; // added for python functionality
typedef vector<pair<string, string> > cmdLines_t;
cmdLines_t vCmdLines;
bool bFoundPy; // added for python functionality
public:
typedef map<string, string> catalog_t;
typedef map<string, string> envVars_t;
CScripting(){};
CScripting(string _sMod, string _sCust, string _sProf, string _sScript, PGTYPE* Pgt1, PGTYPE* Pgt2);
virtual ~CScripting();
int findProcessingScripts();
void run(envVars_t& mEnvVars);
};
#endif
什么可能导致此类错误?
编辑:修正了一些错别字。
答案 0 :(得分:0)
这是@Mike Vine的答案,评论中给出了答案。把它放在这里以获得更好的可见性:
您正在声明一个名为pyPgEnv的静态但未定义它。在你的 CPythonPgsm.cpp文件添加PyObject * CPythonPg :: pyPgEnv;。那应该 修复第一个错误。第二个错误看起来像你包括 CScripting.h声明了CScripting的析构函数但是它 没有在任何cpp文件中定义。看起来你需要定义 它在CScripting.cpp中,或者它已经在另一个cpp中定义了 你不包括