2012-08-22 28 views
0

已經搜索了足夠的答案,但沒有一個解決方案適用於我。在多個Cpp文件中使用變量

方案: 我想包含一個.h文件,其中聲明瞭一些函數(未定義)和一些變量聲明。

如果我包括在源文件中該頭文件(2要準確)實際使用的函數和變量,然後,編譯的最後一個具有規定

未定義參考`接頭錯誤abc :: myfun(char const *,char const *,char *)'

頭文件中的所有函數和變量都聲明爲extern並且包含保護符。

我希望有一個cpp文件將一個值放入.h文件中定義的變量和另一個cpp文件中以便能夠讀取它。

此外,如果有幫助,每一件我的代碼是在命名空間中,我在您的.h文件中定義(namespace abc{ //all my code, in all the files }

+1

你可以分享你的代碼??? – perilbrain

+0

首先,至少有一個源文件是否定義了變量/函數?你是否在鏈接中包含這些內容?其次,你是否在命名空間的外部包含你的頭文件?你不想無意中嵌套 - * ie *'abc :: abc :: something' – paddy

+0

特別是'abc :: myfun(char const *,char const *,char *)'至少一個罪魁禍首。你可以從你的頭文件發佈聲明,並在源文件中定義它的位置嗎? – MartyE

回答

3

聲明正在做的正是 - 讓編譯器知道您計劃的對象在宣佈「某處」。該「某處」將是編譯單元(.c.cpp文件),其中該變量將是定義爲

這裏的(跳過爲了簡單起見,網罩)的例子:

foo.h

extern int global_foo; 

foo.c

#include "foo.h" 
int global_foo; // optionally you can initialize like this: int global_foo = 123; 

main.c

#include "foo.h" 
void bar() 
{ 
    global_foo = 0; // accessing that variable which is "outside" of this file 

如上所述水稻 - 確保你不小心築巢的命名空間,因爲abc::something是不一樣的abc::abc::something

+0

但是這不起作用,它仍然說變量和函數有未定義的參考 –

+3

你可以將你的問題提煉成一個簡短的代碼示例,並提供它與你正在得到的錯誤? (以及用於構建的命令行) – YePhIcK

0

你的錯誤似乎與abc::myfun(char const*, char const*, char*)。我能夠重現並證實這一點。沒有第二部分,你會得到錯誤。

我猜你有一個頭文件類似

namespace abc 
{ 
    void myfun(char const* p1, char const* p2, char* p3); 
} 

和一個.cpp源文件需要

namespace abc 
{ 
    void myfun(char const* p1, char const* p2, char* p3) 
    { 
     // do fun stuff 
    } 
} 
+0

嗨,我已經完成了這個任務,仍然給了我一個錯誤 –

+0

@VenushreePatel嗯,恐怕我需要看你的代碼進一步診斷。 – MartyE

相關問題