C++ - Třídy (Export funkcí z třídy do jiné) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++ - Třídy (Export funkcí z třídy do jiné) – C / C++ – Fórum – Programujte.comC++ - Třídy (Export funkcí z třídy do jiné) – C / C++ – Fórum – Programujte.com

 

CodeHustla
~ Anonymní uživatel
5 příspěvků
9. 8. 2013   #1
-
0
-

Zdravím,

mam třídy v hlavičkových souborech jak je značeno na obrázku. Červené čáry značí, že se využivají určité funkce ze třídy CObject1 na kterou mam při definici vytvořen ukazatel. Problém je ale v tom když chci ze třídy CObject1 zavolat nějakou funkci ze tříd které jsou includované pod ní. (CObject2, CObject3). To mě samozřejmně při kompilaci vyskočí error (Pokud tedy skusím zavolat z CObject1 funkci ze třídy CObject3).

error C2065: 'CObject3' : undeclared identifier
error C2227: left of '->Menu' must point to class/struct/union/generic type
1>          type is ''unknown-type''

S tímto problémem se už tak potýkám dlouho a nějak nevim jak ho vyřešit kromě toho tedy že bych to naplácal do jedné třídy nebo tak. Děkuji za rady a nápady předem.

Nahlásit jako SPAM
IP: 212.96.160.–
vitamin+8
Grafoman
9. 8. 2013   #2
-
0
-

Mne sa osvedcilo nieco taketo:

///subor CObject1.h

#pragma once			

class CObject1;	//musi byt pred includmi

#include "CObject3.h"

class CObject1{
	//...
};
///subor CObject3.h

#pragma once			

class CObject3;	

#include "CObject1.h"

class CObject3{
	//...
};

edit:

Akonahle chces volat z metody definovanej v objekte CObject1 metodu z objektu typu CObject3 tak musis rozdelit preklad na 2 moduly. V hlavickovych suboroch budu len deklaracie metod a definicie budu az v konkretnych .cpp suboroch kde uz budes poznat metody obidvoch tried.

edit2:

Je tu este dalsia moznost. Mozes pouzit template funkcie, tie sa kontroluju az pred pouzitim (cize v neskorsej faze prekladu)

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
CodeHustla
~ Anonymní uživatel
5 příspěvků
9. 8. 2013   #3
-
0
-

Dobře moc ti dík za odpověď, vyzkouším.

Teď jsem trochu zmatený se strukturou zdrojových souborů. Jedem malý příklad:

//funkce.h

#ifndef _FUNKCE_H
#define _FUNKCE_H

void Hello();

#endif
//funkce.cpp

void hello()
{
       .......................
}
// main.cpp
#include <iostream>
#include <funkce.h>
//#include <funkce.cpp> - Nemuzeme includovat cpp do cpp

int main()
{
   hello();
}

Nějak nechápu jak se nalinkuje/zkompiluje soubor funkce.ccp ve kterém je definována fce hello. Je nutno přidat parametr kompilátoru na soubor (nejspíše ano), nějak si to totiž nemůžu představit při velkém projektu že bych pokaždé musel přidávat cpp soubor s definicí do parametru kompilace tak jako to je příklad na linuxsoftu.

Nahlásit jako SPAM
IP: 212.96.160.–
CodeHustla
~ Anonymní uživatel
5 příspěvků
9. 8. 2013   #4
-
0
-

------EDIT-----

To nemluvím o tom že v souboru funkce.cpp bude kompilátor hlásit chybu.

Nahlásit jako SPAM
IP: 212.96.160.–
vitamin+8
Grafoman
9. 8. 2013   #5
-
0
-

Ty skompilujes kazdy .cpp subor zvlast. Vysledny subor vecsinou konci na .o, ale kazdy kompilator to moze mat inak (napr clang moze kompilovat do .bc, .ll, ...). Ked mas skompilovane vsetky .cpp subory tak vysledne .o subory musis zlinkvat dokopy. Az linker poprepaja deklaracie funkcii s definiciami ktore mozu byt kludne v inom .o subore. Vecsina IDE  to robi ale zateba a staci zmacknut 1 tlacitko :)

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý