2011-09-08 70 views
1

我有這個...C++模板和結構問題

template <typename Key, typename Value> 
class A { 
public: 
    //... 
private: 
    struct MyStruct{ 
     Key key; 
     Value value; 
    }; 
}; 

,這讓我以下錯誤:

Error 1 error C2146: syntax error : missing ';' before identifier 'value' 
Error 2 error C4430: missing type specifier - int assumed. 
Error 3 error C4430: missing type specifier - int assumed. 

一些規格: 使用Visual Studio 2010 Windows 7的64位

我的錯誤可以在這些行之前還是之後?

+1

顯示這是造成錯誤的代碼了。順便說一下,您在類定義的末尾丟失了一個分號。 –

+0

這取決於你發送給模板的類型。你能提供一個完整的錯誤的例子,也是你的用法的例子嗎? – Suroot

+0

爲我編譯使用xcode(gcc4.2) – Colin

回答

2

在類定義之後,在代碼的最後,您忘記了一個分號。

在某些情況下,您需要在模板中編寫typename Key key;而不是簡單的Key key;,因爲編譯器可能不知道Key確實是typename。所以試試這個:

template <typename Key, typename Value> 
class A { 
public: 
    //... 
private: 
    struct MyStruct { 
     /* typename not allowed here */ Key key; 
     /* typename not allowed here */ Value value; 
    }; 
}; 
+0

oops,我已經在代碼中。這是一個錯字 – JavierIEH

+1

@Javier:那應該沒問題。錯誤在別的地方。 –

+0

好像我有一個錯字...使用T而不是Value。 但現在我有另一個錯誤。它說: 錯誤錯誤C2233:'表2':包含零大小數組的對象數組是非法的 – JavierIEH

0

你忘了最後一個分號來結束你的類定義。

0

首先,也許這只是您粘貼的代碼中的錯字,但您錯過了;在類定義的末尾。

除此之外,我沒有看到問題。確保你聲明的對象爲 A<type, type> a;

你對模板類型使用什麼?

+0

根據我在這裏閱讀的內容,看起來你的錯誤是在別的地方,很可能是一個缺少的分號「;」 – 2011-09-08 02:56:00

0

看起來你錯過了一個分號來關閉你的課程。

這使用G ++ 4.6.1編譯罰款對我來說:

#include <iostream> 

template <typename Key, typename Value> 
class A { 
    public: 
    A() {} 
    private: 
    struct MyStruct { 
     Key key; 
     Value value; 
    }; 
}; 

int main(void) { 
    A<int, char> a; 
} 
+0

它也編譯我,我想我的錯誤是在別的地方,但我不能找到它! – JavierIEH