未解析的外部符号C ++ - 错误的声明?

时间:2013-03-28 01:58:00

标签: c++ compiler-errors external

我在编写课程时遇到了问题。 当我将定义移动到另一个源文件以保持“干净”时出现问题。

我收到的信息是:

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 ==========

其中Kasa_Sklepowa是我在main.cpp中声明为全局的对象 - 我认为这可能是出现问题的原因。

在它向我展示使用字符串的类dclaration中有错误之前。

#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)
{
...
}

2 个答案:

答案 0 :(得分:0)

我认为你不需要在cpp文件上使用extern声明。

关于您之前遇到的与字符串相关的错误 - 请确保#import <string>

答案 1 :(得分:0)

这一行:

Rachunek Kasa_sklepowa();

声明一个与变量不同的函数。

您需要做的是将此行写在与Rachunek类相同的标题中:

extern Rachunek Kasa_sklepowa;

在相应的.cpp文件中,写一下:

Rachunek Kasa_sklepowa;

第一行只是声明它对编译器可见,第二行实际定义它,以便它放在.obj文件中并且对链接器可见。

BTW,更好的方法是使用静态变量:

class Rachunek
{
public:
    static Rachunek Kasa_sklepowa;

    ...

在.cpp文件中,写一下:

Rachunek Rachunek::Kasa_sklepowa;