C++ Visual Studio C++;2010年项目链接错误

C++ Visual Studio C++;2010年项目链接错误,c++,visual-studio-2010,lnk2019,C++,Visual Studio 2010,Lnk2019,我在VSC++2010中有一个多文件项目,但由于某些原因,它无法正确链接其中的一些文件 例如,我有CParser.h和CParser.cpp。h只是一些函数声明: #pragma once #include <string> void parseArg(int argc, char* argv[], GVar gv); void parseCfg(string cfg, GVar gv) #pragma一次 #包括 void parseArg(int-argc,char*argv

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

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

#pragma once
#include <string>

void parseArg(int argc, char* argv[], GVar gv);
void parseCfg(string cfg, GVar gv)
#pragma一次
#包括
void parseArg(int-argc,char*argv[],GVar-gv);
void parseCfg(字符串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*/
}
#包括
#包括
#包括
#包括
#包括“\u GlobalVar.h”//定义GVar,不相关
#包括“CParser.h”
void parseArg(int argc,char*argv[],GVar&gv){
/*不太相关*/
}
错误是:

main.obj:错误LNK2019:未解析的外部符号“void\uu cdecl” parseArg(整数,字符**const,类GVar)” (parseArg@@YAXHQAPADVGVar@@@Z)在函数\u SDL\u 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();
    }
}
模板
void RDAMHandler::clean(){
龙我;
而(!avtick.empty())
avtick.pop();
对于(i=v.size()-1;i>=0;i--){
删除所有[i];
好的,回来;
v、 向后弹出();
}
}
宣言:

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();
};
模板
类RDAMHandler{
矢量all;
优先权;
向量v;
公众:
T&operator[](长x);
长插入(T&x);
void del(长x);
无效清除();
};
我看不出有什么不同;有什么问题

编辑:和错误

main.obj:错误LNK2019:未解析的外部符号“public:void” __此调用RDAMHandler::clean(void)“(?clean@$RDAMHandler@USDL_Surface@@@@QAEXXZ)在函数中引用 “无效cdecl清理(类GVar)”(?清理@@YAXVGVar@@@Z)


它们是两种不同的重载—标头中的声明具有
GVar-gv
,而.cpp文件中的定义具有
GVar&gv
。其中一个可能是打字错误。

CParser.cpp

我认为你必须使用声明

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

而不是

CParser.cpp文件中的void parseArg(int-argc,char*argv[],GVar&gv)

CParser.h

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

对于下一个错误,

请参考 1.


希望这将对您有所帮助。

要在下次从链接器提供的名称中查找这些内容,请使用Visual Studio附带的
undname
(即使用VS命令提示符)和
C++name Uncorator
。请检查
VCProject
中是否包含
.h
文件。在
解决方案资源管理器
窗格中进行检查。谢谢!还有一个问题,我已将其编辑成原始问题。我认为您在代码中使用了
cleanup(GVar)
,请检查itHmm,不,我正在调用该类的实例。这就是清理看起来的样子:void cleanup(GVar gv){gv.images.clean();}这就是它的名称:cleanup(gv);请在
cpp
中尝试
template T void RDAMHandler::clean()
,希望这将有助于您了解更多参考信息