2012-04-22 2 views
0

Я получаю сбой во время выполнения при попытке выполнить простую программу, которая соиЬ это строковый объект, я использую Borland C++ Compiler версии 5.5 с помощью следующего кода:Сбой при станд :: соиЬ строки

#include <iostream> 
#include <string> // Usaremos as funcoes mais modernas de String em C++ 
#include <conio.h> 

using namespace std; 

// <Prototipos > 

int MenuPrincipal(void); 

void DesenharCentralizado(string String, int CoordY); 

// </Prototipos> 

int main() { 
    while(MenuPrincipal() != 0); // Para sair, ele deve retornar 0 
    return 0; 
} 

int MenuPrincipal(void) { 
    string Titulo = "Agenda"; 

    clrscr(); 

    DesenharCentralizado(Titulo, 4); 
    getch(); 
    return 0; 
} 

void DesenharCentralizado(string Frase, int CoordY) { 
    int PosX=wherex(), PosY=wherey(); 

    gotoxy((80-Frase.length())/2, CoordY); 
    cout << Frase; // XXX CRASH 
    gotoxy(PosX, PosY); 
} 

PS: Пожалуйста, не жалуйтесь на использование старого conio.h и все это, это для моего класса C++, и мой учитель учит нас использовать его first & hellip;

+0

Это работает, если вы избавитесь от вещей 'conio.h'? –

+0

Простите, что ваш учитель настолько странный ... это то, где современные ресурсы, такие как StackOverflow, сохраняют день. ... В частности, если вы закомментируете 'gotoxy' до и после' cout <<', он работает без сбоев? – Potatoswatter

+0

Николь не просил спросить жалобу, потому что он задавался вопросом, может ли быть проблемой conio - если вы устраните возможные причины, это поможет определить причину. –

ответ

1

Borland 5.5. только частичная поддержка для std::string.

Может случиться так, что ваш код будет виноват в этом конкретном случае, но даже в этом случае вы никуда не денутся (и вы не получите нигде очень быстро), пытаясь использовать std::string с этим компилятором.

Если ваш учитель требует, чтобы вы использовали Borland 5.5, ваш учитель пытается научить себя, как он учит вас. Этот подход иногда подходит, но отправьте сюда своего учителя. Теперь, к wingleader ’ сек учительницы:

Борланд 5,5 сломанный инструмент. Это не просто предварительный стандарт: он сломан. Студенты не смогут научиться чему-либо положительному от его использования, точно так же, как пытаться научиться играть на пианино на рояле, которое сильно не соответствует мелодии.

Если вы должны поддерживать 15-летние компьютеры (или более старые), используйте, возможно, g ++ 2.95 или Visual C++ 6.0. В противном случае используйте бесплатные современные инструменты, такие как (с 2012 года) MinGW g ++ 4.6 или новее, или Visual C++ 10.0 или новее. Новые компиляторы (хотя и не Visual Studio Express IDE) хорошо работают даже на компьютере с объемом памяти 265 МБ, который с 2012 года включает в себя несколько десятилетних ПК. Code :: Blocks - хорошая среда для старых компьютеров Windows.

+0

Спасибо, я буду использовать MSVC дома, но он -действительно - заставляет нас использовать Borland C++ 3.1. ** 3.1. **. Намного лучше в следующем году мы узнаем ASM (с другим учителем), а в 2014 году мы перейдем на Java ... –

2

Если закомментировать все в файле и заменить его

#include <iostream> 
int main() { std::cout << "Hello, world!"; } 

делает эту работу? Если да, то попробуйте

#include <iostream> 
#include <string> 
int main() { std::cout << std::string("Hello, world!"); } 

С удалением <conio.h> и призывает к его функциям, программа достаточно проста, чтобы указать сломанную набор инструментов, а также добавлять новые функции по одному может помочь отследить то, что сломано. Это может быть некорректная версия библиотеки времени выполнения или некоторая коррупция при установке Borland или файлов проекта.

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

+0

его компилятор с 2000 года, когда conio.h был значимым, я думаю, что это, вероятно, внутренняя проблема win32, если он не pre-XP –

+0

std :: cout << std :: string («Hello, world!») ; << Это не сработает. Это проблема. Как я могу решить эту проблему сейчас ... Я должен изменить компилятор?): Трепет, я действительно надеюсь, что смогу использовать Borland C++) :. –

+0

Обновите свой компилятор до последней версии. В этом нет ничего плохого. – chris