фатальная ошибка: строка: компиляция такого файла или каталога не прекращена - PullRequest
0 голосов
/ 03 февраля 2012

Я боролся более 3 часов, но не могу найти решение. Простая программа helloworld работает хорошо, и я могу получить вывод,

 #include<iostream>
    #include<string>

    using namespace std;
    int main(){
       string s;
       cout<<"hello world";
    }

Но для проекта My Sudoku у меня есть следующий пользовательский заголовок файлы, SudokuSolver.h, Matrix.h, Cell.h, Pos.h, Error.h, Exception.h и соответствующие им файлы .cpp.

И ExampleProgram.cpp использует эти файлы заголовков, чтобы решить судоку.

(Все файлы .h и .cpp находятся в одной папке.)

Я включил using namespace std; и включил строку как #include <string>. в каждом заголовочном файле, где бы я ни использовал string.h. Но даже если я получаю fatal error: string: No such file or directory compilation terminated., когда я бегу как

g ++ ExampleProgram.cpp SudokuSolver.h Cell.h Error.h Pos.h Matrix.h

Когда я компилирую ExampleProgram.cpp как

 g++ -c ExampleProgram.cpp SudokuSolver.h
 Cell.h Error.h Pos.h Matrix.h       

Я не получаю ошибку.

Когда я запускаю ExampleProgram.cpp , используя ./a.out, я не получаю вывод для моего решателя судоку. Скорее я получаю вывод моей ранее запущенной программы helloworld. Это показывает, что мой ExampleProgram.cpp не был успешно скомпилирован. Но, как было сказано ранее

g++ -c ExampleProgram.cpp  SudokuSolver.h 
    Cell.h Error.h Pos.h Matrix.h       

не дает никакой ошибки.

Это мой вывод:

[fosslab@fosslab SudokuSolver]$ g++ -c Error.h
[fosslab@fosslab SudokuSolver]$ g++ -c Exception.h
[fosslab@fosslab SudokuSolver]$ g++ -c Matrix.h
[fosslab@fosslab SudokuSolver]$ g++ -c Cell.h
[fosslab@fosslab SudokuSolver]$ g++ -c Pos.h
[fosslab@fosslab SudokuSolver]$ g++ -c SudokuSolver.h
[fosslab@fosslab SudokuSolver]$ g++ -c ExampleProgram.cpp SudokuSolver.h Excepti
on.h Cell.h Error.h Pos.h Matrix.h                                             
[fosslab@fosslab SudokuSolver]$ ./a.out
hello world[fosslab@fosslab SudokuSolver]$ 

Ответы [ 2 ]

2 голосов
/ 27 апреля 2015

Я знаю, что уже поздно, но мой ответ может помочь другим, кто сталкивается с этой проблемой. Вполне возможно, что в вашей системе нет пакета libstdc ++ - devel. Пожалуйста, перепроверьте. Я столкнулся с той же проблемой и смог ее решить, установив пакет devel.

2 голосов
/ 03 февраля 2012

Прежде всего, заголовочные файлы должны быть включенными в исходные файлы. Не добавляйте их в командную строку для компилятора.

Во-вторых, аргумент командной строки "-c" для g ++ указывает g ++ не связывать и создавать исполняемый файл, а только создавать объектный файл.

Вы должны либо сделать:

$ g++ -c ExampleProgram.cpp
$ g++ ExampleProgram.o

или

$ g++ ExampleProgram.cpp

В обоих вышеупомянутых случаях вы получите новую исполняемую программу "a.out".

Если у вас есть несколько исходных файлов, скомпилируйте их, а не заголовочные файлы:

$ g++ -c Error.cpp
$ g++ -c Exception.cpp
$ # etc...
$ g++ -c ExampleProgram.cpp
$ g++ Error.o Exception.o ... ExampleProgram.o
...