我知道之前有这个问题,但我没有找到任何解决方案。所以 - 我在Visual Studio 2010中收到此错误:
错误LNK2001:未解析的外部符号“class Czas __cdecl data(void)”(?data @@ 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 :(得分:3)
Czas data();
这声明了一个名为data
的函数,该函数不带参数并返回Czas
。我认为你实际上想要默认构造一个Czas
对象,如下所示:
Czas data;
这也意味着您应该删除此行中data
之后的括号,因为它不是函数:
data().Wpisz();
// ^^ Remove
此外,您需要将构造函数的默认参数移到头文件中:
Czas(int dl = 1, int m = 1, int r = 1970);
默认参数需要对包含标题的任何代码可见,以便他们知道可以在没有任何参数的情况下调用它。