2017-09-28 1 views
0

Ich arbeite seit einigen Jahren an C++ und habe einige Sachen kompiliert, aber das folgende Problem ist für mich völlig neu und macht einfach keinen Sinn.cpp-Datei kompiliert nicht in clang ++ und g ++

Im Folgenden sind die Schritte, die ich folgende:

  • Cygwin Setup mit g ++ Version mit: 6.4.0 und Klirren ++ Version: 4.0.1
  • erstellt einen neuen CPP-fie mit erhabenem Text hinzugefügt einfache cout und kompiliert
    mit dem Befehl: Clang ++ -g -Wall -std = C++ 14 thread1.cpp -O Thread, funktioniert gut.
  • hinzugefügt neue Inhalte vielleicht eine andere cout, diesmal nach der Kompilierung ich bekomme eine Tonne Fehler Angabe seiner nicht utf-8-Datei.
  • speicherte die Datei mit UTF-8-Codierung in sublime Text und versuchte auch mit UTF-8 BOM-Codierung, immer noch immer nicht utf-8 Dateifehler.
  • den Dateibefehl in Cygwin ausgeführt, um Dateicodierung zu überprüfen, Datei -i thread1.cpp, wurde als thread1.cpp ausgegeben: text/x-c; charset = utf-8.

Irgendwelche Hinweise darauf, was hier schief gehen könnte?

Es folgt der Code, der kompiliert: gibt Fehler

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

class threadFunctor{ 
     public: 

}; 
int main(int argc , char** argv){ 
    cout << "Hello"; 
    return 0; 
} 

folgenden Code:

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

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

Es folgt ein Ausschnitt der Fehler generiert:

./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>. 
+1

Sie haben einen Cout hinzugefügt ... Ändert die Zeichenfolge, die Sie ausgeben, in ein ['u8' Literal] (https://stackoverflow.com/questions/13444930/is-the-u8-string-literal-necessary-in -c11) einen Unterschied machen? – StoryTeller

+0

Eine tatsächliche [mcve] mit genauen Fehlermeldungen würde wirklich helfen. – chris

Antwort

6

von #include "thread" tun, Sie haben gesagt (zumindest per Konvention), das aktuelle Verzeichnis nach einemzu überprüfenDatei zuerst. Das Problem ist, dass Sie eine thread Datei in Ihrem aktuellen Verzeichnis haben. Vermutlich ist es Ihre ausführbare Datei vom ersten Mal, als Sie kompiliert haben. Dies wird offensichtlich durch die Fehler, die explizit ./thread sagen.

Sie sollten alle Standard-Header über #include <thread> anstelle von #include "thread" einschließen - Sie wollen nie zuerst woanders nach Standard-Headern suchen.

+0

Ich verwendete "Thread" das erste Mal auch, wenn es gut kompiliert, es ist nur aus dem zweiten Mal, dass das Kompilieren fehlschlägt. – Arup

+0

@Arup Das ist, weil das erste Mal, dass Sie nicht Ihre 'thread' ausführbare Datei hatten, so führte die Suche im aktuellen Verzeichnis nichts aus und die Suche wurde fortgesetzt, um Pfade einzuschließen. – chris

+0

Es hat funktioniert, danke Chris. – Arup

Verwandte Themen