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.
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.
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.
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");
}
}
}
}
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)
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 ==========
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
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, ...)