Dlaczego jeden kod działa w jednym kompilatorze a w drugim nie?

0

Witam.

Tak jak w temacie, dlaczego np. w Dev C++ działa kod, ale gdy się go przekopiuje do visual C to wyskakują błędy i kod nie działa? Pytanie z ciekawości, które mnie nurtuje.

0

To jest tak, że w Dev jest stary kompilator, a w Visual nowszy(lepszy). Dla przykładu z ostatnich, mój kolega w klasie Obiekt zdefiniował "char *imie;". Miał zrobić alokowanie pamieć, więc mechanicznie dał "char *imie=new char[30];" a to błąd i mała herezja. Kompilator w Dev nie wyłapał, a w Visual od razu.

0

Aha czyli lepiej przesiąść się na Visual żeby jakiś nawyków sobie nie wyrabiać...

ok oto ten kod:

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

class enigma // tworzy obiekt ,,enigma''
{
	public:
	int znaki; // zmienna przechowywujaca ilosc znakow w tekscie
	int wylosowane[38]; // zmienna przechowywujaca wylosowane liczby
	char zakodowane[40];// przechowuje zaszyfrowany kod
	std::string tekst;//zmienna przochywujaca tekst
	
	void menu() // Menu programu
    {
	std::cout <<"\t\t\t==========" << std::endl;
	std::cout <<"\t\t\t||ENIGMA||" << std::endl;
	std::cout <<"\t\t\t==========" << std::endl;
	
	std::cout <<"\n\n";
	std::cout <<"==================" << std::endl;
	std::cout <<"||1. Szyfrowanie||" << std::endl;
	std::cout <<"||0. Wyjscie    ||" << std::endl;
	std::cout <<"==================" << std::endl;
	
	
    }	
};

int main()
{
	using namespace std;
	//==============================================
	//zmienne skalarne spoza obiektu enigma
	int opcja; // zmienna odpowiedzialne za switch
	int a = 0;// zmienna pomocnicza
    int b; // zmienna pomocnicza
    int d = 0;
	int o = 0;
    int losowa_tablica[31] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
	char tablica[ 62 ] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'w', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'w', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9','\0'};
	static int gotowe_liczby[20]; 
	
	
	enigma* obiekt= new enigma;
	
	// =============================================
	srand( time( NULL ) );
	while (opcja !=0)
	{
	obiekt->menu();
	std::cout <<"\nWybierz dzialanie: ";
	std::cin >> opcja;
	cin.ignore(); 
	
	switch (opcja)
	{
		case 1:
			system ("cls");
			obiekt->tekst;
			cout <<"\n\nPodaj tekst do zaszyfrowania: ";
			getline(cin, obiekt->tekst); // pobiera tekst od uzytkownika
			std::cout <<"\n\n";
			obiekt->znaki = obiekt->tekst.length(); // przypisanie zmiennej znaki wartosci odpowiadajacej ilosci znakow w tekscie
			std::cout <<"\nWylosowano nastepujace liczby:  ";
			for ( int i = 0; i < obiekt->znaki; i++ ) 
			   {
                  b =( rand() % 31 ) + 0;
                  a++;
                  obiekt->wylosowane[a] = b;
                  std::cout << obiekt->wylosowane[a] <<" ";
               }
               		
			for( int i = 0; i < obiekt->znaki; i++ ) 
			{
				d++;
				gotowe_liczby[d] = obiekt->wylosowane[d] + losowa_tablica[d];
				
				
			}
			std::cout <<"\n\a\a\nTwoj szyfr to: ";
			while (o < obiekt->znaki)
			{
				o++;
				std::cout << tablica[gotowe_liczby[o]];
				std::cout << obiekt->zakodowane[o];
			}
	     	cout <<"\n\nWcisnij klawisz 1 aby zaczac od poczatku " << std::endl;
	     
	     	
	     	cin >> opcja;
	        
		 	if (opcja = 1)
	     	{
	     		system ("cls");
	     	}
	     	
	        
	}
    }
	
}
0

Ten kod się kompiluje.

wtf.cpp: In function ‘int main()’:
wtf.cpp:61:26: warning: statement has no effect [-Wunused-value]
             obiekt->tekst;
                          ^
wtf.cpp:94:27: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
              if (opcja = 1)
                           ^

(GCC 4.8.1 -std=c++11 -Wall -Wextra -Weffc++ -pedantic)

0

No a u mnie w Visual 2010 nie chce się skompilować za to w Dev C++ działa :-)

1>------ Build started: Project: ENIGMA, Configuration: Debug Win32 ------
1>  ENG.cpp
1>c:\users\damian\desktop\c++ projekty\enigma\enigma\eng.cpp(48): warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
1>c:\users\damian\desktop\c++ projekty\enigma\enigma\eng.cpp(49): warning C4700: uninitialized local variable 'opcja' used
1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
1

Próbowałeś przeczytać co jest napisane w wyjściu kompilacji?

fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

Nie używam VS a znam ten błąd, bo już tysiąc osób na forum o nim pisało. Zainstaluj SP1 do VS 2010.

VS 2010 SP1: http://www.microsoft.com/en-us/download/details.aspx?id=23691
Informacje: http://stackoverflow.com/questions/10888391/error-link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-inval

1

to wyskakują błędy i kod nie działa

Jak masz problem z kompilacją, to
• zawsze podajesz kod który się nie kompiluje
• zawsze podajesz jakie błędy wyskakują
• zawsze podajesz nazwę i wersję kompilatora, oraz
• jeśli to nie jest oczywiste z punktu poprzedniego, podajesz system operacyjny (Windows, Linux, ...)

1 użytkowników online, w tym zalogowanych: 0, gości: 1