Visual Studio C++ 2010 in-project link error

Visual Studio C++ 2010 in-project link error

本文关键字:link error in-project 2010 Studio C++ Visual      更新时间:2023-10-16

我在VSC 2010中有一个多文件项目,但由于某些原因,它无法正确链接其中的一些项目。

例如,我有cparser.h and cparser.cpp。cparser.h只是一些函数声明:

#pragma once
#include <string>
void parseArg(int argc, char* argv[], GVar gv);
void parseCfg(string cfg, GVar gv)

cparser.cpp仅包含实现:

#include <cstdio>
#include <fstream>
#include <cstring>
#include <string>
#include "_GlobalVar.h" //defines GVar, not relevant
#include "CParser.h"
void parseArg(int argc, char* argv[], GVar &gv) {
    /*not really relevant*/
}

和错误:

main.obj:错误lnk2019:未解决的外部符号" void __cdecl Parsearg(int,char * * const,gvar类)" (?parsearg @@ yaxhqapadvgar @@ z)在功能中引用_sdl_main

编辑:

还有一个其他问题:

template<class T>
void RDAMHandler<T>::clean() {
    long i;
    while(!avtick.empty())
        avtick.pop();
    for(i = v.size() - 1; i >= 0; i--) {
        delete all[i];
        all.pop_back();
        v.pop_back();
    }
}

和声明:

template<class T>
class RDAMHandler {
    vector<T*> all;
    priority_queue<long> avtick;
    vector<bool> v;
public:
    T &operator[](long x);
    long insert(T &x);
    void del(long x);
    void clean();
};

我在这里看不到任何区别;有什么问题?

编辑编辑:和错误

main.obj:错误lnk2019:未解决的外部符号" public:void __ thiscall rdamhandler :: clean(void)"(?clean@?$ rdamhandler@usdl_surface @@@@@ qaexxz)在功能中引用 " void __cdecl清理(GVAR类)"(?清理@@ yaxvgvar @@@ z)

>

in cparser.cpp

我认为您必须使用语句

void CParser::parseArg(int argc, char* argv[], GVar &gv)

而不是

void parseArg(int argc, char* argv[], GVar &gv) in CParser.cpp file

cparser.h

声明应更改为 void parseArg(int argc, char* argv[], GVar &gv);

对于下一个错误

供参考,请仔细阅读1.使用类

的模板

希望这对您有帮助。

它们是两个不同的过载 - 标题中的声明具有GVar gv,而.cpp文件中的定义具有GVar &gv。其中之一可能是错字。

相关文章: