错误“this_thread”:该符号的“::”必须是一个类型左边?

问题描述 投票:3回答:4

我的头:

#include <chrono>
#include <thread>
#include <iostream>
#include <string>
#include <fstream>
#include "include\curses.h"

我的代码的问题:

        std::this_thread::sleep_for(std::chrono::milliseconds(500));

我的错误:

错误C3083:“this_thread”:该符号的“::”必须是一个类型左

它只是没有意义的我!?需要每头增加。智能感知(我在VS2012)检测引用和参数。它只是将不会编译。

其他相关的错误

*错误C2039: 'sleep_for':不是 'STD' 中的一员*

*错误C3861: 'sleep_for':标识符找不到*

visual-studio-2012 c++11 namespaces thread-sleep
4个回答
4
投票

我刚刚经历了类似的问题 - VS智能感知与我的代码没有问题,但我是越来越建筑时,不仅在VS但在GCC和你有同样的错误。 (不是VS的bug)

一个很大的问题,我已经是2头分别包括对方。从本质上讲,因为一个文件包含其它但其他依赖于第一,你可以得到一些奇怪的行为。

正如你肯定知道,头通常具有的#ifndef的在其中包括标题的全部内容的顶部,所以它永远不能被包含不止一次。这至少让我们可以陷入在一个无限包括循环,但我们仍然有一个问题。

当包括第二,它引用的第一,但第一已定义,所以第一个不获取包含在第二,随后从第二头中的代码被复制到第一它被包括在内。因为第二报头包含上述它所需要的功能,你会得到不被定义的事情的错误,甚至没有的名称空间存在(因为这些不被第二插在第一后上方,直到定义。)

这里有两个解决方案:

  1. 在我的情况下,因为我是仅依赖于所述第一文件与单个小功能,我选择简单地通过手动内联于所述第二代码中删除依赖关系中的一个。
  2. 你也应该能够原型添加到您想要使用的功能,因此,如果一个被列入低于其他的你至少有一个原型告诉编译器“这将在以后定义,只是相信我,它的存在。”

我发现了什么事情的方式是通过在包括列表,其中透露了更多的错误,其中许多是相似的,但现在困扰着其他包括移动一切人之上的问题标题。

我不完全知道为什么using namespace为你工作,但我可以计算的是,这个using语句至少告诉编译器把名字作为命名空间,而不是一些不确定的事情,因此误差约不是一个命名空间类型。


1
投票

由于@stefan意见,我可以解决这个问题。这可能是一个Visual Studio 2012 compilling错误,我会放一个短版的答案,以保持干净的东西,但我必须补充的是,#include "include\curses.h"不缺的问题(虽然我会按照有关/ ;-)乔纳森的提示)

必要标题:

#include <chrono>
#include <thread>

需要的名称空间(它不会只std::this_thread::sleep_for()在VS2012编译:

using std::this_thread;

固定的代码行:

sleep_for(std::chrono::milliseconds(500));

附加说明在Linux上使用G ++编译器(带-std=C++11选项)这个问题不会发生。即你可以简单地使用:

std::this_thread::sleep_for(std::chrono::miliseconds(500));

没有using std::this_thread声明

如果任何人都可以进一步解释这个(在VS2012),请添加评论!


0
投票

为了避免别人有通过其代码挖奇怪,为什么在地球上产生的编译器类似的错误:

请确保你正确地包括头关闭他们的命名空间范围。


Example:

abc.h

namespace abc
{
    int foo();
// oops, you forgot to close that scope

abc.cpp

#include "abc.h"
namespace abc
{
  int foo() { /* ... */ } // This now implements ::abc::abc::foo()
}

0
投票

我在Vc2017有一个确切的类似错误。

在我的情况下,调用到std :: this_thread是在头文件中的类成员函数。

只要我有问题的函数的实现移动到.cpp文件固定的问题。

© www.soinside.com 2019 - 2024. All rights reserved.