簡體   English   中英

在 hpp 文件中聲明 extern class c++ 並使用它 cpp 文件

[英]declare extern class c++ in hpp file and use it cpp file

我有兩個類:Individu 和 Cite,如您所見,Individu 是之前定義的

//file.hpp
#include <iostream>
#include <stdexcept>
#include <vector>

extern Cite CITE;


class Individu {
   protected:
       static int id;
       TYPE t;
   public:
       Individu();
       virtual ~Individu();
       static int & getCompteur();
       virtual void afficher(std::ostream& ) const;
       virtual TYPE getType() const;
};

class Cite {
   std::vector<const Individu *> tab;
   public:
       Cite();
       ~Cite();
       void addPersonne(const Individu *);
       int size() const;

};
std::ostream& operator<<(std::ostream&, const Individu& );


#endif

我需要添加一個 Individu 一個,它被實例化到 Cite 的選項卡向量中,並且只有一個 Cite 我聲明 Exctern CITE Cite 可以像這樣使用:

// file.cpp
#include <algorithm>

#include "file.hpp"




int Individu::id = 0;


Individu::Individu()  {
    CITE.addPersonne(*this);
    id++;
}

Individu::~Individu(){
    
}

int& Individu::getCompteur() {
    return id;
}


void Individu::afficher(std::ostream& o) const{
    o << id;
}

void Personne::afficher(std::ostream& o) const {
    o << nom << " " << id;
}

std::ostream& operator<<(std::ostream& o, const Individu& i ){
    i.afficher(o);
    return o;
}

TYPE Individu::getType() const {
    throw IllegalException();
}

Cite::Cite(){

}

Cite::~Cite() {

}

void Cite::addPersonne(const Individu * i){
    tab.push_back(i);

}

int Cite::size() const {
    return tab.size();
}

當我編譯時,我得到了這個錯誤:

file.hpp:13:8: error: ‘Cite’ does not name a type
   13 | extern Cite CITE;
      |        ^~~~
file.cpp: In constructor ‘Individu::Individu()’:
file.cpp:30:5: error: ‘CITE’ was not declared in this scope
   30 |     CITE.addPerconne(*this);
      |     ^~~~
make: *** [makefile:15 : build/deviant.o] Erreur 1

我知道 Cite 尚未定義,所以這就是我收到該錯誤的原因,那么我該如何修復它?

您的代碼中有兩個問題:

  1. extern Cite CITE在定義 class Cite之前聲明,因此編譯器此時不知道Cite是什么。 您應該將此聲明移到Cite的定義之后。
  2. 你永遠不會定義CITE extern變量聲明是編譯器的 promise,您稍后將定義該變量。 您實際上是在說“我 promise 一個名為CITECite object 存在,即使您現在看不到它”。 您從未真正創建 object,從而破壞了 promise。 您需要在某處定義Cite CITE (最有可能在 file.cpp 中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM