2013-05-15 61 views
1

我知道這個問題之前有過,但我沒有找到任何解決方案。所以 - 我得到這個錯誤在Visual Studio 2010:錯誤LNK2019:函數中引用的無法解析的外部符號_main

錯誤LNK2001:無法解析的外部符號 「類Czas __cdecl數據(無效)」

(數據@@ YA AVCzas @@ XZ?)

我有main()函數,並且我在propetites中設置了控制檯。

,這是我的代碼:

Czas.h

#ifndef CZAS_H 
#define CZAS_H 
class Czas{ 
private: 
    int dzien; 
    int miesiac; 
    int rok; 
public: 
    int Dzien() const; 
    int Miesiac() const; 
    int Rok() const; 
    Czas(int dl, int m, int r); 
    void Ustaw (int d, int m, int r); 
    void Wypisz() const; 
    void Wpisz(); 
    void koryguj(); 
    int porownaj (const Czas& wzor) const; 
}; 
#endif 

Czas.cpp

#include "Czas.h" 
#include <iostream> 
using namespace std; 

    int dzien; 
    int miesiac; 
    int rok; 
    int Czas::Dzien() const 
    { 
     return dzien; 
    } 
    int Czas::Miesiac() const 
    { 
     return miesiac; 
    } 
    int Czas::Rok() const 
    { 
     return rok; 
    } 
    Czas::Czas(int d=1, int m=1, int r=1970) 
    { 
     dzien = d; 
     miesiac = m; 
     rok = r; 
     koryguj(); 
    } 
    void Czas::Ustaw (int d, int m, int r) 
    { 
     dzien = d; 
     miesiac = m; 
     rok = r; 
    } 
    void Czas::Wypisz() const 
    { 
     //wypisujemy dzien; 
     if (dzien<10) 
      cout<<"0"<<dzien<<"."; 
     else 
      cout<<dzien<<"."; 
     //wypisujemy miesiac 
     if (miesiac<10) 
      cout<<"0"<<miesiac<<"."; 
     else 
      cout<<miesiac<<"."; 
     //wypisujemy rok 
      cout<<rok; 
    } 
    void Czas::Wpisz() 
    { 
     cin>>dzien; 
     cin>>miesiac; 
     cin>>rok; 
     koryguj(); 
    } 
    void Czas::koryguj() 
    { 
     if (dzien>31) 
      dzien = 31; 
     if (dzien<1) 
      dzien = 1; 

     if (miesiac>12) 
      miesiac = 12; 
     if (miesiac<1) 
      miesiac = 1; 

    } 
    int Czas::porownaj (const Czas& wzor) const 
    { 
     if (dzien == wzor.Dzien() && miesiac == wzor.Miesiac() && rok == wzor.Rok()) 
      return 1; 
     else 
      return 0; 
    } 

最後的main.cpp

#include "Czas.h" 
#include <iostream> 

using namespace std; 
int main(int argc, char **argv) 
{ 
    int flaga=1, flaga2=0; 
    Czas data(); 
    cout<<"1 - Wpisz date\n2 - Wypisz date\n3 - Porownaj\nx - wyjscie"; 
    while (flaga == 1) 
    { 
     fflush(stdin); 
     switch (getchar()) 
     { 
     case '1': 
      { 
       data().Wpisz(); 
       flaga2=1; 
       break; 
      } 
     case '2': 
      { 
       if (flaga2=0) 
        cout<<"Trzeba najpierw wpisac date!"; 
       else 
     //   data().Wypisz(); 
       break; 
      } 
     case '3': 
      { 
       if (flaga2=0) 
        cout<<"Trzeba najpierw wpisac date!"; 
       else 
       // czas().porownaj 
       break; 
      } 
     case 'x': 
      { 
       flaga=0; 
       break; 
      } 
     default: 
      { 
       cout<<"klawisz nieobslugiwany"; 
       break; 
      } 
     } 
    } 
    return 0; 
} 

我有什麼錯這裏?

+0

您是否將Czas.cpp添加到您的項目中? – user1764961

+0

是的。問題解決了。 Sftrabbit完成了它^^。 – user1916778

回答

3
Czas data(); 

聲明一個名爲data函數,它沒有參數,並返回一個Czas。我覺得你真的想默認構造像Czas對象,因此:

Czas data; 

這也意味着你應該在這行data後刪除括號,因爲它不是一個函數:

data().Wpisz(); 
// ^^ Remove 

在此外,您需要將構造函數的默認參數移動到頭文件中:

Czas(int dl = 1, int m = 1, int r = 1970); 

默認參數需要是visib對任何包含頭文件的代碼,以便他們知道他們可以在沒有任何參數的情況下調用它。

+0

VS2010不應該爲此發出警告嗎? – user1764961

+0

@ user1764961不知道,我不使用VS.它可以做,但沒有理由必須。 –

+0

如果它的實現方式,那麼它必須。 :-) – user1764961

相關問題