3 votes

Définition mutilée lors de l'édition de liens entre les fichiers objets

Supposons que nous ayons B.h , main.cpp y B.cpp , main.cpp -> main.obj y B.cpp -> B.obj

En raison de separate compilation Je pense que main.obj y B.obj devraient tous deux avoir la définition de class B . Pourquoi il n'y a pas l'erreur:définition multiple de B lors de l'établissement des liens ?

B.h

#ifndef B_H
#define B_H

class B {
    public:
        void fun();
    private:
        int x = 0;
};

#endif

B.cpp

#include "B.h"

void B::fun() {

}

main.cpp

#include "B.h"

int main() {
}

3voto

Sneftel Points 10929

Ni main.obj ni B.obj ne contiennent la définition de B. Les fichiers d'objets n'ont pas besoin de contenir des définitions de types, puisque le but des définitions de types est d'aider les utilisateurs à comprendre le fonctionnement de l'ordinateur. produire le code exécutable et les données d'un fichier objet. Si deux fichiers sources opèrent sur le même type, la définition de ce type doit être incluse dans chacun d'eux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X