Tässä on varmasti joku puusilmäongelma vaan taustalla, tai sitten olen ymmärtänyt jotain ihan väärin. Enihau kuvitellaan että on tällaiset kooditiedostot.
main.cpp
#include <iostream>
#include <stdlib.h>
#include "cfoo.cpp"
using namespace std;
int main(int argc, char *argv[])
{
cFoo* oFoo;
return 0;
}cfoo.cpp
#include "cfoo.h" // class's header file
// class constructor
cFoo::cFoo()
{
// insert your code here
}
// class destructor
cFoo::~cFoo()
{
// insert your code here
}cfoo.h
#ifndef CFOO_H
#define CFOO_H
/**
* No description
*/
class cFoo
{
public:
// class constructor
cFoo();
// class destructor
~cFoo();
};
#endif // CFOO_HMinun järkeilyni mukaan tuon pitäisi ainakin kääntyä, vaikkei se mitään teekään. Kuitenkin Dev-C++ 4.9.8.0:n mukana tullut kääntäjä sanoo että
lainaus:
Compiler: Default compiler
Building Makefile: "C:\Documents and Settings\Toho\Omat tiedostot\dev\luokat\Makefile.win"
Executing make...
make.exe -f "C:\Documents and Settings\Toho\Omat tiedostot\dev\luokat\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/include/c++" -I"C:/Dev-Cpp/include/c++/mingw32" -I"C:/Dev-Cpp/include/c++/backward" -I"C:/Dev-Cpp/include"g++.exe main.o cfoo.o -o "luokat.exe" -L"C:/Dev-Cpp/lib"
cfoo.o(.text+0x0):cfoo.cpp: multiple definition of `cFoo::cFoo()'
main.o(.text+0x0):main.cpp: first defined here
cfoo.o(.text+0x6):cfoo.cpp: multiple definition of `cFoo::cFoo()'
main.o(.text+0x6):main.cpp: first defined here
cfoo.o(.text+0xc):cfoo.cpp: multiple definition of `cFoo::~cFoo()'
main.o(.text+0xc):main.cpp: first defined here
cfoo.o(.text+0x12):cfoo.cpp: multiple definition of `cFoo::~cFoo()'
main.o(.text+0x12):main.cpp: first defined heremake.exe: *** [luokat.exe] Error 1
Execution terminated
Mikä meni pieleen?
#include "cfoo.cpp" // Ylläoleva luullakseni on ongelma. Muuttappa seuraavaksi: #include "cfoo.h"
Kiitos paljon!
Kääntäjä siis osaa itse sisällyttää cpp-tiedoston, kun siitä ei sille tarvitse edes mainita? Hyvä näin.
Yleensä *.h-tiedostosta löytyy #include <*.cpp> eikä päinvastoin, koska nyttenhän voi tapahtua virhe jos .cpp liitetään moneen kertaan. Myöskin jokaisen tiedoston alkuun on hyvä laittaa tuo #ifndef-tarkistus.
Metabolix kirjoitti:
Yleensä *.h-tiedostosta löytyy
#include <*.cpp>eikä päinvastoin ...
Hmm.. ei? Itse implementaation sisältävää tiedostoa (.cpp) ei tule sisällyttää minnekään.
Aihe on jo aika vanha, joten et voi enää vastata siihen.