如何解决这些错误:C2146& C4430(以c ++为单位)

时间:2014-03-11 00:59:39

标签: c++

所以,我的老师给了班级这个代码,但是我在运行它时遇到了麻烦。 我得到的错误是C2146& C4430。我尝试通过添加包含到头文件来解决问题,但我仍然不确定问题是什么。

我已经评论了下面的代码,其中编译器指出了错误。

assoc.h文件

template<class T> class assoc {
 public:

  struct pair {
    string key;   //error C2146: syntax error: missing ';' before identifier 'key'
    T      value; 
    pair  *next;  


    pair() : key(), value(), next(NULL) {}

    pair( const string& key, T value, pair* next = NULL ) //error c4430: missing type specifier - int assumed. Note: c++ does not suport default - int
      : key(key), value(value), next(next) {}
  };

private:
  pair * table;
}

1 个答案:

答案 0 :(得分:2)

未定义string类型。您需要从std命名空间导入它:

#include <string>
using std::string;

当然你也可以使用using namespace std;从命名空间导入所有内容,但这通常是一个坏主意 - 对于不像string那样广泛的事情,最好使用限定名称(例如{{ 1}})。您的代码实际上是一个很好的示例,std::pair using namespace std会与pair中的std发生碰撞。