2013-05-15 64 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

相关问题