Błąd nowicjusz

0

Witam. Od 3 dni uczę się C++. Mój kompilator to Microsoft Visual C++ 2010 Express. Ucze się z ksiazki symfonia C++ Problem polega na tym ze pojawia mi się błąd:

1>------ Build started: Project: Symfonia C+++, Configuration: Debug Win32 ------
1>II program.obj : error LNK2005: _main already defined in I program.obj
1>C:\Documents and Settings\Konrad\moje dokumenty\visual studio 2010\Projects\Symfonia C+++\Debug\Symfonia C+++.exe : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
 

W kodzie:

 /*---------------------------
Program przelicza wysokosci
podane w stopach na wyskosci
podane w metrach.
----------------------------*/
#include <iostream>
#include <conio.h>

int main()
{
	int stopy;						//Do przechowania dany wejscowej
	double metry;					//Do wpisania wyniku
	double przelicznik = 0.3;		//przelicznik stopy na metry

	std::cout<<"Podaj wysokosc w stopach: ";	//przyjecie danych
	std::cin>>stopy;							//	z klawiatury

	metry=stopy * przelicznik;					//właściwe przeliczenie

	std::cout<<"\nn";							//to samo co   std::cout<<std::endl;

	//-------wpisanie wynikow---------
	std::cout<<stopy<<"stop - to jest:" <<metry<<"metrow\n";
		getch();
}

Proszę o pomoc

0

A nie masz przypadkiem dwóch programów w jednym projekcie? Błąd linkera wskazuje na podwójną definicję main

0

Kod jest ok:
http://ideone.com/h0Irz
Namieszałeś coś z projektem w visualu.

0

Teraz mam błąd error C2447: '{' : missing function header (old-style formal list?)

1

#Microsoft Visual C++ 2010 Express to IDE.
#"Symfonia C++" jest bardzo starą książką, wydaną przed standardem języka. Dużo lepiej byłoby jakbyś załatwił sobie np. "Symfonię C++ Standard", która jest jużbardziej zgodna ze standardem.
#wywal getch(), odpalaj programy tak, żeby IDE je zatrzymywało. W przypadku C::B jest to z automatu, w przypadku VC++ nie pamiętam, ale na pewno łatwo to znaleźć.
#dość duże wcięcie zrobiłeś, wydaje mi się, że lepiej byłoby zrobi je troche mniejsze, bo jak bedzie kilka takich wielkich wciec to kod bedzie "szerszy niz dluzszy" :D
#naprawdę potrzebujesz komentarzy w stylu "double przelicznik = 0.3; //przelicznik stopy na metry"?!

std::cout<<"\nn"; //to samo co std::cout<<std::endl; to NIE jest to samo. std::cout<<"\n"<<flush; to jest to samo co std::endl; Jak widać, endl powoduje wywalenie danych ze strumienia. Jak będziesz tego potrzebował, to prawdopodobnie bedziesz juz wiedzial o co chodzi, poki co, znak nowej linii to "\n", a endl stosując tylko strumienie sout i cin nie bedzie Ci raczej potrzebny.

Skopiuj kod programu, zamknij wszystkie projekty, stworz nowy projekt, wklej kod, sprawdz czy działa.

Edit: Brakuje jeszcze return 0; na koniec maina. W prawdzie w tym przypadku jest on niejawnie, dlatego nikt sie nie pluje o niego, jednak lepiej zawsze o nim pamiętać, bo nie zawsze, przy jego braku na koncu, będzie niejawnie zwrócone 0.

2

@kaboom, co do Twojego ostatniego stwierdzenia, standard C++ (ISO/IEC 14882:2003(E)) w 3.6.1 mówi:

5 A return statement in main has the effect of leaving the main function (destroying any objects with automatic
storage duration) and calling exit with the return value as the argument. If control reaches the end
of main without encountering a return statement, the effect is that of executing
return 0;

0

@Rev Napisałem, że brakuje jawnego returna, ale niejawnie będzie zwrócone 0, a przynajmniej o to mi chodziło :)
Miałem jednak pewne błędne przekonanie dot. tego, kiedy nie będzie zwrócone 0 niejawnie, ale uzupełniłem swoje braki w wiedzy, dzięki za info :)

0

Miałem jednak pewne błędne przekonanie dot. tego, kiedy nie będzie zwrócone 0 niejawnie

Brak jest niejawnego return 0 w C89. Nowsze standardy (C99, C11, C++98, C++03, C++11) zakładają że brak returna w main oznacza return 0.

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