【问题标题】:"Expected constructor, destructor, or type conversion before '<' token"“'<' 标记之前的预期构造函数、析构函数或类型转换”
【发布时间】:2010-12-12 05:01:01
【问题描述】:

我遇到了语法/解析错误,但我似乎找不到它。

DataReader.h:11: 错误:'

这里是 DataReader.h:

#include <fstream>
#include <iostream>
#include <vector>

#ifndef DATA_H
#define DATA_H
#include "Data.h"
#endif

vector<Data*> DataReader();   // This is line 11, where the error is..

这是 .cpp 文件:

#include "DataReader.h"

using namespace std;

vector<Data*> DataReader()
{
 .....
}

我跳过了DataReader()的内容,因为我认为它无关紧要,但如果需要我可以发布它。

感谢您的任何意见/建议。

【问题讨论】:

    标签: c++ constructor destructor


    【解决方案1】:

    在您的头文件中,您需要明确使用std::vector 而不仅仅是vector

    另外,我猜“Data.h”包含以下形式的语句:

    #ifndef DATA_H
    #define DATA_H
    ...
    #endif
    

    没关系,但您也不应该在 #include "Data.h" 中使用这些包含保护,而只能在文件本身中使用。

    【讨论】:

    • 即在 Data.h 本身的顶部有这些 #ifndef ... #define ....,在这个文件的这个结尾有 #endif。 (因此所有可能引用此标头的文件都不需要写这几行)。这只是一个样式提示,与编译错误无关。
    • 如果包含的文件具有基于与外部#ifndef 相同宏的#ifndef 保护,则在#include 之前没有#define 行至关重要,否则永远不会包含头文件的内容。
    【解决方案2】:

    在你的头文件中,你需要在函数DataReader的声明中使用std::vector,而不是简单的vector

    标准包含&lt;vector&gt; 导致vector 类模板在std 命名空间中定义,并且头文件中的声明发生在任何using namespace std;using std::vector; 之前。

    【讨论】:

      【解决方案3】:

      我认为在您的标题中您可能需要写std::vector&lt;Data*&gt; DataReader();,因为using namespace std; 不在范围内。

      【讨论】:

        【解决方案4】:

        在 Datareader 之前使用 std:vector 而不是 vector。

        【讨论】:

          猜你喜欢
          • 2011-12-04
          • 2011-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多