【问题标题】:Error expected identifier before token "<"令牌“<”之前的错误预期标识符
【发布时间】:2014-03-16 17:18:03
【问题描述】:

我是 C++ 的初学者。我有这个名为 SharedData.h 的头文件。它在下面给出。

//SharedData.h

#include <memory>

typedef struct Shared_data
{
    std::string _data;
    bool IsConsumedbyNodeA;
    bool IsConsumedbyNodeB;

public:
    Shared_data():
        tokenizer_data(""),IsConsumedbyNodeA(false),IsConsumedbyNodeB(false){};
    Shared_data& ReadSharedData();
    void WriteSharedData(Shared_data &);
}Shared_data;

extern std::shared_ptr<Shared_data> ptr_to_Shared_data;//I am getting the above mentioned error here

shared_ptr 是在 Shared_data.cpp 中定义的,这样我就可以在内存和外部声明中获得该对象的单个副本,无论我在哪里包含标头。

我尝试了很多,但不知道如何解决这个错误。

请帮忙.....

问候, TechTotie

【问题讨论】:

  • 编译器不知道std::shared_ptr是什么,试试.h文件中的#include &lt;memory&gt;
  • 我已经包含了头文件#include 只是忘了在这里提及。抱歉。
  • 您是否启用了使用 C++11 进行构建?
  • 感谢您的帮助。我正在使用 mingw32 进行编译。我认为它确实支持 C++ 11。
  • 在大多数情况下,您必须手动启用使用 C++11 进行构建(即使编译器确实支持它)。检查你的编译标志。

标签: c++ c++11 syntax-error structure shared-data


【解决方案1】:

您需要包含标题memory

【讨论】:

  • 我已经包含了头文件#include 只是忘了在这里提及。抱歉。
  • @TechTotie 你告诉你的编译器使用 C++11 模式吗?对于clanggcc,您需要添加标志-std=c++11。如果做不到这一点,您是否检查过您的编译器实际上支持 C++11? gcc --version 至少应为 4.8,clang --version 应至少为 3.4。
  • 感谢您的帮助。我正在使用 mingw32 进行编译。我认为它确实支持 C++ 11。但我仍然会尝试使用 -std=c++11 标志,我也会检查 gcc 版本。
  • 我用“gcc --version”检查了MingW中的版本,它是“gcc.exe (GCC) 4.8.1”。它支持 C++11 吗?我尝试使用 -std=c++11 但它不起作用。它给出“cc1plus.exe: error: unrecognized command line option "-std=c++11"”。
  • @TechTotie 是的,应该。您不应该将这些命令直接传递给cc1plus,而是传递给g++。不幸的是,我不熟悉 MinGW,无法帮助您。
【解决方案2】:

要使用 std::shared_ptr,您应该启用对 C++11 标准的支持并包含标头 memory

【讨论】:

  • 我已经包含了头文件#include 只是忘了在这里提及。抱歉。
猜你喜欢
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多