簡體   English   中英

Visual Studio C ++ 2010項目中鏈接錯誤

[英]Visual Studio C++ 2010 in-project link error

我在VSC ++ 2010中有一個多文件項目,但是由於某些原因,它無法正確鏈接其中的一些文件。

例如,我有CParser.h和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:函數_SDL_main中引用的未解析的外部符號“ void __cdecl parseArg(int,char * * const,class GVar)”(?parseArg @@ YAXHQAPADVGVar @@@ Z)

編輯:

還有另一個問題:

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:無法解析的外部符號“公共:void __thiscall RDAMHandler :: clean(void)”(?clean @?$ RDAMHandler @ USDL_Surface @@@@@@ QAEXXZ)在函數“ void __cdecl cleanUp(class GVar)”中引用(?@@清理@@@ YAXVGVar Z)

它們是兩個不同的重載-標頭中的聲明具有GVar gv ,而.cpp文件中的定義具有GVar &gv 其中之一可能是拼寫錯誤。

CParser.cpp中

我認為您必須使用聲明

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

代替

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

並在CParser.h中

該聲明應更改為void parseArg(int argc, char* argv[], GVar &gv);

對於下一個錯誤

供參考,請仔細閱讀本 1. 使用類的模板

希望這會幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM