Visual studio 2017 błąd kompilacji w c++


#1

Witam wszystkich

Szybko i na temat
Mam taki program

//First - pierwszy program w c++

#include <iostream>
#include <conio.h>
void main()
{
    std::cout << "Hello word" << std::endl;
    getch();
}

wciskam f7 i dostaje coś takiego

1>------ Kompilacja rozpoczęta: Projekt: First, Konfiguracja: Debug Win32 ------
1>Źródło.obj : error LNK2005: Element _main jest już zdefiniowany w elemencie main.obj
1>Źródło1.obj : error LNK2005: Element _main jest już zdefiniowany w elemencie main.obj
1>Źródło2.obj : error LNK2005: Element _main jest już zdefiniowany w elemencie main.obj
1>C:\Users\Documents\Visual Studio 2017\Projects\Kurs c++\First\Debug\First.exe : fatal error LNK1169: znaleziono co najmniej jeden wielokrotnie zdefiniowany symbol
1>Kompilowanie projektu „First.vcxproj” wykonane — NIEPOWODZENIE.
========== Kompilacja: 0 zakończono powodzeniem, 1 zakończono niepowodzeniem, 0 zaktualizowano, 0 pominięto ==========

Specyfikacja:
Projekt systemu Win32
Typ aplikacji: Aplikacja konsolowa
Opcje dodatkowe: Pusty projekt
Element to: Plik c++ (.cpp)

Co mam zrobić, gdzie jest błąd?
Z góry dziękuje za pomoc.


#2

int main() {}

koniecznie, tzn. chyba zależy od kompilatora, ale zaleca się int
w końcu main coś zwraca, co nie?


#3

1 opcja: miałeś wcześniej w projekcie więcej plików usunąłeś je tylko z widoku a zostały one tak naprawde w projekcie a nie są widoczne.
2 opcja :vs coś nie odświeżył i powinieneś usunąć pliki kompilatora z folderu projektu.

Ogólnie chodzi o to że vs widzi definicje main w kilku plikach.


#4

kompilator rozumie i int i void ale każdy mówi że standardem w dzisiejszych czasach jest int. Wyjaśni ktoś dlaczego?


#5

Z tego co się orientuje to void nie zwraca żadnej wartości, a int zwraca. Ta zwracana wartość może ujawniać błąd w trakcie działania programu, ale na ogół w wielu przypadkach zostawia się return 0. Void właściwie istnieje dla wygody, aby nie trzeba było pisać return 0 za każdym razem, a nawet jak się piszę int main to można pominąć w niektórych kompilatorach. Ale istnieje pewien standard języka C++ i w tym standardzie dopuszczalny jest tylko int main. I wiele kompilatorów trzyma się ściśle standardu, vs pod tym względem jest mocno liberalny i dopuszcza wiele niestandardowych konstrukcji, które w innych kompilatorach po prostu nie zadziałają.