2016-04-28 19 views
0

我一直有一個相當令人沮喪的鏈接器問題,對我來說沒有多大意義。我有以下4個文件:C++鏈接器問題,未解決的外部符號與我自己的代碼

// CompileFunctions.h 
#pragma once 
#include "FileListing.h" 
int compileSheet(FileListing & file); 
int compileVerse(FileListing & file); 

// CompileSheet.cpp 
#include "CompileFunctions.h" 
int compileSheet(FileListing & file){ 
    ... 
} 

// CompileVerse.cpp 
#include "CompileFunctions.h" 
int compileVerse(FileListing & file){ 
    ... 
} 

// main.cpp 
#include "CompileFunctions.h" 
int main(){ 
    ... 
    compileSheet(file); 
    compileVerse(file); 
} 

這將生成以下鏈接錯誤:

main.obj : error LNK2001: unresolved external symbol "int __cdecl compileVerse(struct FileListing &)" ([email protected]@[email protected]@@Z) 

我已經嘗試添加extern在頭部的聲明,檢查,以確保兩個源文件均相同的目錄和編譯,並清理構建。但似乎沒有任何幫助。鑑於一個相同的功能如何鏈接正常,而另一個不是令人困惑的我,我不知道是什麼原因造成的。

+0

因此,沒有你的項目成功打造,如果你刪除調用'compileVerse(文件);'? –

+0

@MohamadElghawi - 奇怪的是...... –

+0

它可能是一些流氓'extern「C」',它改變了聲明和定義之間的函數簽名。 'extern「C」'函數與非'extern「C」'完全不同。 – Dialecticus

回答

1

picture of config menu

繼一個評論,這似乎是VerseCompiler.cpp行事怪異。我查了一下它的屬性頁,看是否有人被排除在構建和發現了另一個罪魁禍首:

儘管該文件的名稱,它被視爲由Visual Studio的頭文件。我猜我一定是錯誤地將它創建爲一個.cpp文件,並將其重新命名,但沒有意識到這並沒有改變它的行爲。將其設置爲C/C++ Compiler解決了我的鏈接器問題。

相關問題