我的头:
#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':标识符找不到*
我刚刚经历了类似的问题 - VS智能感知与我的代码没有问题,但我是越来越建筑时,不仅在VS但在GCC和你有同样的错误。 (不是VS的bug)
一个很大的问题,我已经是2头分别包括对方。从本质上讲,因为一个文件包含其它但其他依赖于第一,你可以得到一些奇怪的行为。
正如你肯定知道,头通常具有的#ifndef的在其中包括标题的全部内容的顶部,所以它永远不能被包含不止一次。这至少让我们可以陷入在一个无限包括循环,但我们仍然有一个问题。
当包括第二,它引用的第一,但第一已定义,所以第一个不获取包含在第二,随后从第二头中的代码被复制到第一它被包括在内。因为第二报头包含上述它所需要的功能,你会得到不被定义的事情的错误,甚至没有的名称空间存在(因为这些不被第二插在第一后上方,直到定义。)
这里有两个解决方案:
我发现了什么事情的方式是通过在包括列表,其中透露了更多的错误,其中许多是相似的,但现在困扰着其他包括移动一切人之上的问题标题。
我不完全知道为什么using namespace
为你工作,但我可以计算的是,这个using语句至少告诉编译器把名字作为命名空间,而不是一些不确定的事情,因此误差约不是一个命名空间类型。
由于@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),请添加评论!
为了避免别人有通过其代码挖奇怪,为什么在地球上产生的编译器类似的错误:
请确保你正确地包括头关闭他们的命名空间范围。
namespace abc
{
int foo();
// oops, you forgot to close that scope
#include "abc.h"
namespace abc
{
int foo() { /* ... */ } // This now implements ::abc::abc::foo()
}
我在Vc2017有一个确切的类似错误。
在我的情况下,调用到std :: this_thread是在头文件中的类成员函数。
只要我有问题的函数的实现移动到.cpp文件固定的问题。