Почему строковый тип приводит к тому, что программа на С ++ не запускается? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть простая программа, написанная на C ++, на компьютере с Windows 10, скомпилированная с помощью компилятора MinGW g ++.

Я включаю заголовок <string>, и он работает нормально. Когда я включаю тип данных string, он компилируется, но не запускается.

Минимальный объем кода для воспроизведения:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string greeting;
    cout << "hi" << endl;
    return 1;
}

Обратите внимание, это отлично работает:

#include <iostream>
#include <string>
using namespace std;

int main() {
    //string greeting;
    cout << "hi" << endl;
    return 1;
}

Версия компилятора - 6.3.0
g++.exe (MinGW.org GCC-6.3.0-1) 6.3.0

Я скачал его 3 дня назад, поэтому я предполагаю, что это самая последняя версия. (Может и нет?)

Я гуглил и просматривал stackoverflow для ответов.

Ближайший вопрос, который я смог найти, человек сдался и сменил операционные системы.

Еще одним решением, которое я нашел, было использование компилятора Cygwin. Я бы предпочел не делать этого, так как у меня уже есть отличный компилятор. Кажется, что инструменты MinGW достаточно широко используются, чтобы я мог использовать компилятор.

У любых других ресурсов форума / блога / и т.д. есть проблемы с преобразованием строк или вызовом строковых методов.

ПРИМЕЧАНИЕ: Тот же самый точный код прекрасно работает на Ubuntu 16.04 с включенным компилятором.

редактирует:

Хотя я понимаю, что «это не работает» не помогает, я не знаю, как еще это описать. Я запускаю скомпилированную программу, и она ведет себя так же, как если бы я ввел echo ''. Нет выходных данных, нет признаков того, что что-то произошло. Какой способ выражения этого поведения наиболее полезен?

Если я использую отладчик, я получаю program exited with code 0xc0000139

Быстрый поиск в Google возвращает результаты, показывающие, что является проблемой с компилятором. То же, что и комментарии ниже о моей версии компилятора ...

Для компиляции программы я запускаю g++ main.cpp -o b.exe Чтобы выполнить его, я запускаю ./b.exe

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

После некоторых полезных комментариев и большого разочарования я решил попробовать собрать самый актуальный компилятор. Я прогибался и использовал Cygwin. (У меня действительно нет проблем с Cygwin, я просто хотел заставить MinGW работать.)

Я следовал инструкциям этого сайта (после загрузки текущего источника с https://gcc.gnu.org).

http://preshing.com/20141108/how-to-install-the-latest-gcc-on-windows/

Примечания:

  • Это для более старой версии gcc, но я заменил соответствующие номера версий на 8.2.0 (текущая на данный момент).

  • Я пропустил некоторые предварительные условия, и мне пришлось cd в исходный каталог и запустить ./contrib/download_prerequisites из терминала Cygwin. Он справился со всем без проблем, и хотя это заняло немного времени, теперь я могу использовать string типы данных и запускать программу (успешно).

  • Не забудьте последнюю команду make install. Я сделал, и это была головная боль.

Наконец, спасибо всем полезным комментариям и тем, кто попросил разъяснений. Когда я звоню механику и говорю: «Моя машина не едет», они задают полезные вопросы, и мы работаем вместе, чтобы получить им необходимую информацию. Это то, что произошло выше, и я кое-что узнал (и решил свою проблему).

0 голосов
/ 29 августа 2018

Mingw имеет давнюю проблему с некоторыми консолями (см. Их faq ). Возможно, стоит проверить, не выводится ли он, а не выполняется, например, перенаправление в файл ./b.exe >out.txt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...