Проблема с шаблонами и структурами C ++ - PullRequest
1 голос
/ 08 сентября 2011

У меня есть это ...

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 x64

Может ли моя ошибка быть до или после этих строк?

Ответы [ 4 ]

2 голосов
/ 08 сентября 2011

Вы забыли точку с запятой после определения класса в самом конце вашего кода.

В некоторых случаях вам нужно написать typename Key key; вместо простого Key key; в шаблонах, так как компилятор может не знать, что Key действительно является именем типа. Итак, попробуйте это:

template <typename Key, typename Value>
class A {
public:
    //...
private:
    struct MyStruct {
        /* typename not allowed here */ Key key;
        /* typename not allowed here */ Value value;
    };
};
0 голосов
/ 08 сентября 2011

Похоже, вы пропустили точку с запятой, чтобы закрыть свой класс.

Для меня это прекрасно, используя 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 голосов
/ 08 сентября 2011

Во-первых, возможно, это просто опечатка в коде, который вы вставили, но вам не хватает;в конце определения класса.

Кроме этого, я не вижу проблемы.Убедитесь, что вы объявляете объект как A<type, type> a;

Что вы используете для своих типов шаблонов?

0 голосов
/ 08 сентября 2011

Вы забыли последнюю точку с запятой, чтобы закончить определение класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...