2012-03-07 18 views
0

創建C++ Builder中的類,這個類有一個函數模板特C++ Builder的

static void foo(std::vector < bar* > x, int y); 

但是當我嘗試編譯這段代碼這個錯誤發生:

Undefined symbol 'bar'; Cannot generate template specialization from 'std::vector<_Ty, _Ax>'; >expected;) expected;

怎麼了?

+3

如果定義'bar'? – chrisaycock 2012-03-07 18:49:59

回答

0

由於錯誤提示,沒有可用符號bar的定義。

在申報foo之前的某個時間點需要刪除它;要麼在同一個文件中,要麼在包含它的頭文件中。

+0

但是'foo'是在頭文件中聲明的。所有聲明都是正確的,這是我的問題,如果所有聲明都正確,爲什麼會發生此錯誤? – adalrsjr1 2012-03-07 19:37:25

+0

@ adalrsjr1:顯然,並非所有的聲明都是正確的 - 在'foo'之前沒有'bar'的聲明。 「bar」在哪裏聲明,包含的聲明如何? – 2012-03-07 19:51:30

+0

當我聲明'foo(bar x)'它可以,但是當我聲明'foo(bar * x)'時我有問題,怎麼可能? – adalrsjr1 2012-03-07 20:09:11

0

編譯器告訴你它不知道bar是什麼。 bar在哪裏定義?如果在編譯foo()聲明時尚未定義,則會出現錯誤。

由於您使用的是指針類型的模板參數,你可以使用預先聲明爲bar,如果你不能完全定義bar事前,如:

class bar; // forward declaration 
static void foo(std::vector < bar* > x, int y); 
+0

「酒吧」在標題中定義。我在你展示'class bar的時候就做了, static void foo(std :: vector x,int y);'現在我可以編譯,但是我不能訪問類'bar'的成員 – adalrsjr1 2012-03-07 20:16:41

+0

要訪問成員,需要包含'bar'頭文件在實現'foo()'主體的源文件中。 – 2012-03-07 20:43:53