我知道以前有这个问题,但我没有找到任何解决方案。所以-我在Visual Studio 2010中遇到此错误:
我有main()函数,并且在控制台中设置了控制台。
这是我的代码:
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;
}
我在这里错了吗?
最佳答案
Czas data();
这将声明一个名为
data
的函数,该函数不带任何参数并返回Czas
。我认为您实际上想默认构造一个Czas
对象,如下所示:Czas data;
这也意味着您应该在此行中的
data
之后删除括号,因为它不是函数:data().Wpisz();
// ^^ Remove
另外,您需要将构造函数的默认参数上移到头文件中:
Czas(int dl = 1, int m = 1, int r = 1970);
默认参数对于包含 header 的任何代码都必须可见,以便他们知道可以在没有任何参数的情况下调用它。
关于c++ - 错误LNK2019:函数_main中引用的未解析的外部符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16559350/