1

我知道这个问题以前存在,但我没有找到任何适合我的解决方案。所以 - 我在 Visual Studio 2010 中遇到了这个错误:

错误 LNK2001:无法解析的外部符号“class Czas __cdecl data(void)”(?data@@YA?AVCzas@@XZ)

我有 main() 函数,并且我在 propetites 中设置了控制台。

这是我的代码:

扎什

#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;
}

我在这里有什么问题?

4

1 回答 1

3
Czas data();

这声明了一个被调用的函数data,它不接受任何参数并返回一个Czas. 我认为您实际上希望Czas像这样默认构造一个对象:

Czas data;

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

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

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

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

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

于 2013-05-15T07:39:20.150 回答