Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Simppeli(?) luokkaongelma

tkarkkainen [04.09.2004 17:07:22]

#

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_H

Minun 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 here

make.exe: *** [luokat.exe] Error 1

Execution terminated

Mikä meni pieleen?

arcatan [04.09.2004 19:04:16]

#

#include "cfoo.cpp"
// Ylläoleva luullakseni on ongelma. Muuttappa seuraavaksi:
#include "cfoo.h"

tkarkkainen [04.09.2004 20:20:49]

#

Kiitos paljon!

Kääntäjä siis osaa itse sisällyttää cpp-tiedoston, kun siitä ei sille tarvitse edes mainita? Hyvä näin.

Metabolix [04.09.2004 20:25:31]

#

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.

thefox [06.09.2004 01:49:02]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta