错误LNK2019:函数_main中引用的未解析的外部符号

时间:2013-05-15 07:37:10

标签: c++ visual-studio-2010 linker-errors

我知道之前有这个问题,但我没有找到任何解决方案。所以 - 我在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;
}

我错在哪里?

1 个答案:

答案 0 :(得分:3)

Czas data();

这声明了一个名为data的函数,该函数不带参数并返回Czas。我认为你实际上想要默认构造一个Czas对象,如下所示:

Czas data;

这也意味着您应该删除此行中data之后的括号,因为它不是函数:

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

此外,您需要将构造函数的默认参数移到头文件中:

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

默认参数需要对包含标题的任何代码可见,以便他们知道可以在没有任何参数的情况下调用它。