0

クラスを書くのに問題があります。この問題は、定義を別のソース ファイルに移動して「クリーン」なままにしたときに発生しました。

私が受け取るメッセージは次のとおりです。

1>------ Build started: Project: 1 projekt - sklep, Configuration: Debug Win32 ------
1>  main.cpp
.1funkcje.obj : error LNK2001: unresolved external symbol "class Rachunek Kasa_sklepowa" .(?Kasa_sklepowa@@3VRachunek@@A)
1>metody_r.obj : error LNK2001: unresolved external symbol "class Rachunek Kasa_sklepowa" .(?Kasa_sklepowa@@3VRachunek@@A)

1>C:\Users\Ja\Desktop\Studia\PW\Semestr II\C++\Cwiczenia - klasy,obiekty\Debug\1 projekt - .sklep.exe : fatal error LNK1120: 1 unresolved externals

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

whereKasa_Sklepowaは、main.cpp でグローバルとして宣言したオブジェクトです。これが何か問題がある理由である可能性があります。

文字列を使用したクラス宣言に問題があることを示す前に。

#pragma once

class Rachunek
{
double saldo_ogolne;
public:
    Rachunek() {saldo_ogolne=0;};
    ~Rachunek();
    void transakcja(std::string,std::string,double);
    void czysc_zarobki();
};

ソースファイル (cpp)

extern Rachunek Kasa_sklepowa;
void Rachunek::transakcja(string _pes,string co,double ile)
{ 
     bla bla
     }

メインファイル

Rachunek Kasa_sklepowa();
int main (int agc, char**argv)
{
...
}
4

2 に答える 2

0

この行:

Rachunek Kasa_sklepowa();

変数とは異なる関数を宣言します。

必要なことは、Rachunek クラスと同じヘッダーに次の行を記述することです。

extern Rachunek Kasa_sklepowa;

対応する .cpp ファイルに、次のように記述します。

Rachunek Kasa_sklepowa;

最初の行は、コンパイラに見えるように宣言するだけで、2 番目の行は、.obj ファイルに配置され、リンカーに見えるように実際に定義します。

ところで、より良い方法は、静的変数を使用することです。

class Rachunek
{
public:
    static Rachunek Kasa_sklepowa;

    ...

.cpp ファイルに次のように記述します。

Rachunek Rachunek::Kasa_sklepowa;
于 2013-03-28T02:14:30.270 に答える
0

cpp ファイルの extern 宣言は必要ないと思います。

以前に発生した文字列関連のエラーについては、#import <string>.

于 2013-03-28T02:11:14.250 に答える