cpp文件没有在clang ++和g ++中编译

Aru*_*rup 0 c++ encoding utf-8 clang c++11

我已经在C++上工作了几年,已经编写了几次东西,但是下面这个问题对我来说是全新的,它只是没有意义.

以下是我遵循的步骤:

  • 使用cygwin设置与g ++版本:6.4.0和clang ++版本:4.0.1
  • 创建了一个新的cpp fie,使用sublime文本添加简单的cout并
    使用以下命令编译:clang ++ -g -Wall -std = c ++ 14 thread1.cpp -o thread,工作正常.
  • 添加新的内容可能是另一个cout,这次编译时我得到了大量的错误,说明它不是utf-8文件.
  • 在sublime文本中使用utf-8编码保存文件,并尝试使用utf-8 BOM编码,仍然获得相同而不是utf-8文件错误.
  • 在cygwin中运行file命令检查文件编码,文件-i thread1.cpp,输出为thread1.cpp:text/xc; 字符集= UTF-8.

这里有什么可能出错的指针?

以下是编译的代码:

#include "iostream"
#include "thread"
#include "mutex"
using namespace std;

class threadFunctor{
        public:

};
int main(int argc , char** argv){
   cout << "Hello";
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下代码给出错误:

#include "iostream"
#include "thread"
#include "mutex"
using namespace std;

class threadFunctor{
        public:
};
int main(int argc , char** argv){
   cout << "Hello World";
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是生成错误的片段:

./thread:3:29: error: source file is not valid UTF-8
$<U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>PE<U+0000><U+0000>d<86><U+0014><U+0000><87><F5><CC>Y<U+0000><U+0014><U+0001><U+0000><A9><U+0002><U+0000><U+0000><F0><U+0000>'...
                                                                                                                                                                         ^
./thread:3:30: warning: null character ignored [-Wnull-character]
$<U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>PE<U+0000><U+0000>d<86><U+0014><U+0000><87><F5><CC>Y<U+0000><U+0014><U+0001><U+0000><A9><U+0002><U+0000><U+0000><F0><U+0000>'...
                                                                                                                                                                             ^
./thread:3:31: warning: missing terminating ' character [-Winvalid-pp-token]
$<U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>PE<U+0000><U+0000>d<86><U+0014><U+0000><87><F5><CC>Y<U+0000><U+0014><U+0001><U+0000><A9><U+0002><U+0000><U+0000><F0><U+0000>'...
                                                                                                                                                                                     ^
./thread:4:3: warning: null character ignored [-Wnull-character]
5<U+0001><U+0000><U+0000><E8><B0><U+0001><U+0000><U+0000>E1<C0>1<D2>1<C9><E8><C4><U+0001><U+0000><U+0000>E1<C0>1<D2>1<C9><E8><C8><U+0001><U+0000><U+0000>E1<C0>1<D2>1<C9><E8><CC>...
         ^
./thread:4:4: warning: null character ignored [-Wnull-character]
5<U+0001><U+0000><U+0000><E8><B0><U+0001><U+0000><U+0000>E1<C0>1<D2>1<C9><E8><C4><U+0001><U+0000><U+0000>E1<C0>1<D2>1<C9><E8><C8><U+0001><U+0000><U+0000>E1<C0>1<D2>1<C9><E8><CC>...
                 ^
./thread:4:5: error: source file is not valid UTF-8
5<U+0001><U+0000><U+0000><E8><B0><U+0001><U+0000><U+0000>E1<C0>1<D2>1<C9><E8><C4><U+0001><U+0000><U+0000>E1<C0>1<D2>1<C9><E8><C8><U+0001><U+0000><U+0000>E1<C0>1<D2>1<C9><E8><CC>.
Run Code Online (Sandbox Code Playgroud)

chr*_*ris 6

通过这样做#include "thread",您已经(至少按照惯例)说先检查当前目录中的thread文件.问题是thread您当前目录中有一个文件.据推测,它是您第一次编译时的可执行文件.明确说明的错误就是显而易见的./thread.

您应该包括所有标准标头#include <thread>而不是#include "thread"- 您永远不想先在别处搜索标准标头.