1

この問題は以前にもあったことは知っていますが、解決策が見つかりませんでした。だから - 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;
}

ここで何が間違っていますか?

4

1 に答える 1

3
Czas data();

dataこれは、引数を取らず、 を返す関数を宣言しますCzasCzas実際には、次のようにオブジェクトをデフォルトで構築したいと思います。

Czas data;

dataこれは、関数ではないため、この行の後の括弧を削除する必要があることも意味します。

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

さらに、コンストラクターの既定の引数をヘッダー ファイルに移動する必要があります。

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

デフォルトの引数は、ヘッダーを含むすべてのコードから見えるようにする必要があります。これにより、引数なしで呼び出すことができることがわかります。

于 2013-05-15T07:39:20.150 に答える