Visual C++ 2012:编译器抱怨"missing ';'"
Visual C++ 2012: compiler complains about "missing ';'"
你能告诉我以下模板类有什么问题吗?
#include <vector>
template <typename T, typename C>
struct pQueue{
pQueue():currEnd(c.end()){};
~pQueue(){c.~vector();}
void insert(T& t);
void remove(T& t);
bool find(T& t);
T head(void);
private:
std::vector<T> c;
std::vector<T>::iterator currEnd;
};
编译器对std::vector<T>::iterator currEnd;
行不太满意,并生成以下错误消息:
错误C2146:语法错误:缺少";"在标识符"currEnd"之前
错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int
非常感谢!
编译器不将std::vector<T>::iterator
识别为类型。你必须告诉它:
typename std::vector<T>::iterator currEnd;
CCD_ 3被用作模板化上下文中的歧义消除器。它只是告诉编译器标识符std::vector<T>::iterator
是一个类型,而不是静态成员。标准在模板化上下文中要求这样做,尽管在大多数情况下,编译器甚至可以在指定模板参数T
之前就解决这个问题。
虽然上面的内容回答了您的问题,但我只能强调juancapanza对您的代码所指出的内容。此外,std::queue
已经为您准备好了。
您需要告诉编译器迭代器是一个类型名称,因为它是一个依赖名称:
typename std::vector<T>::iterator currEnd;
除此之外,这个类不需要用户提供的析构函数。您的类定义可以简化为:
template <typename T>
struct pQueue
{
pQueue() : currEnd(c.end()) {};
void insert(const T& t);
void remove(const T& t);
bool find(const T& t); // this should probably be a const method
T head(); // this should probably be a const method
private:
std::vector<T> c;
typename std::vector<T>::iterator currEnd;
};
只是对其他答案的补充:
遗憾的是,VisualStudio没有很好的错误消息。你必须学会它们的意思,而不是逐字逐句地读。例如:
missing ';' before identifier 'currEnd'
是VisualStudio ese通常意味着"我不知道currEnd
之前的标识符是什么。"通常这是由于当时它未定义。10次中有9次,它将是您忽略了#include
标头的类型/类的类型/类名。在这种情况下,看起来更多的是编译器与模板中使用的模板混淆的问题。
然而,这一原则仍然有效。如果你从"编译器不知道currEnd
之前的类型/类是什么"开始,你就会走上正轨。
我认为应该是typename std::vector<T>::iterator currEnd;
。
然后compilcatecompilator编译器可以发现iterator
实际上是一个类型,而不是(std::vector
的)成员。
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- 由于"error C4430: missing type specifier - int assumed. Note: C++ does not support default-int",我现在无法编
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- luaL_len is missing in Lua 5.1
- 文件存在时的最新检查声明生成输入"is missing"
- Qt5PrintSupportd.dll is missing
- Missing sync_val_compare_and_swap_1
- 使用 dev-c++ 运行我的 GIS 应用程序可以"gdal201.dll is missing"
- Windows Boost 1.64 VS2017 missing Python libraries
- missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES
- CMake build error: Qt5PrintSupportConfig.cmake missing
- 如何修复错误消息,如"argument list for class template is missing"?
- "Missing GL version" 从 glewInit() 使用 EGL?
- cudart64_80.dll is missing
- C++ "argument list for class template "迭代器" is missing"错误
- LLONG_MAX missing for g++ 4.9.4?
- 交叉编译时"DSO missing from command line" 莫斯基托示例
- C++ 另一个标头中的结构函数给出"missing type specifier"
- setenv.bat is missing Windows
- wxWidgets 3.0 wxLog:: OnLog and DoLog missing?