Hlavickove soubory a undeclared identifier – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Hlavickove soubory a undeclared identifier – C / C++ – Fórum – Programujte.comHlavickove soubory a undeclared identifier – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Scrat0
Návštěvník
23. 9. 2014   #1
-
0
-

Zdravim,

s C++ teprve zacinam a tak presne nevim jak spravne nastavit (nebo spis jak funguje) v Microsoft Visual C++ volbu precompiled headers. Pisu zaroven 3 cpp soubory a kazdej z nich ma svuj hlavickovej soubor.

Cpp s funkci main je nastaven na /Yc a ostatni dva /Not Using Precompiled Headers...

Mozna to neni nastavene optimalne, ale aspon to funguje.

Horsi je, ze v hlavickovem souboru k cpp s main, nejde deklarovat funkce, ktera jako parametr pouziva objekt deklarovany v jinem mem hlavickovem souboru (ty co maji nastaveno /Not Using Precompiled Headers).

  stdafx.h

#pragma once

#include <iostream>
#include <string>
#include <vector>

#include "object.h" /2 moje hlavickove soubory
#include "funkce.h"
								
#include <windows.h> 

#include <malloc.h>
#include <memory.h>
#include <stdlib.h>
#include <tchar.h> 
#include <strsafe.h> 

#define WIN32_LEAN_AND_MEAN       
#ifndef UNICODE  
  typedef std::string String; 
#else
  typedef std::wstring String; 
#endif

int funkceXY(object & obj); /*chyba - kompilator to vyhodi, ze to neni deklarovano, ale visual c++ po proklepnuti objektu jeho deklaraci najde a zrusi podtrzitko, kterym oznacuje chyby  */

program.cpp

#include "stdafx.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
  object obj();
  int i = funkceXY(obj); //tady bych chtel pouzit funkci

  return 0;
}
		

object.h

#pragma once

#include <windows.h>
#include <WinGDI.h>
#include <tchar.h> 
#include <iostream>
#include <fstream>
#include <strsafe.h> 

#include "stdafx.h"

class object
{
  private:
    int stav;

  public:

};

object.cpp

#pragma once

#include "object.h"

using namespace std;

object::object()
{
  stav=1
}

Zbyvajici cpp a jeho header na chybovou funkci nemaji podle meho vliv.

Nahlásit jako SPAM
IP: 88.100.129.–
Reklama
Reklama
vitamin+8
Grafoman
23. 9. 2014   #2
-
0
-

Precompiled Headers je nestandartne riesenie (nie je definovane v c++ stndarde) ktore riesi dlhe kompilacie ktore su sposobene absenciou modulou v c++. Ak si zaciatocnik tak sa uplne vykasli na predkompilovane hlavicky a zacni sa s nimi zaoberat az ked budes mat vecsi projekt a kompilacia bude trvat dlho.

edit: Mozno dovtedy budu v standarde moduly: http://llvm.org/devmtg/2012-11/videos/Gregor-Modules.mp4 :)

Nahlásit jako SPAM
IP: 95.105.229.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Scrat0
Návštěvník
24. 9. 2014   #3
-
0
-

Hlavni problem ale je, ze me nejde deklarovat funkce, ktera pouziva moji tridu. To ostatni jen mohlo souviset, nicmene i po nastaveni vsech souboru na  /Not Using Precompiled Headers problem pretrvava.

(V tom kodu vyse chybi par stredniku a definice funkce... nenasel jsem tu nic na editaci, ale i pokud to tam je, tak problem trva respektive nastane uz po napsani deklarace.)

Nahlásit jako SPAM
IP: 88.100.129.–
vitamin+8
Grafoman
24. 9. 2014   #4
-
0
-

Ake chyby ti to pise?

Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
KIIV+42
God of flame
24. 9. 2014   #5
-
0
-

Minimalne u toho objektu nemas deklarovanej konstruktor (je jen definovanej v tom souboru objekt.cpp), nevyflusne to to?

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Scrat0
Návštěvník
24. 9. 2014   #6
-
0
-

#5 KIIV
Jsem to odmazal moc, kontruktor i destruktor tam jinak je a kod je funkcni pokud vykomentuju v stdafx.h tu funkci o kterou me jde.

Pokud dam deklaraci funkce int funkceXY(object & obj); do object.h je taky OK. Ale pokud ji dam do stdafx.h tak to chazi tyto chyby:

stdafx.h(44): error C2065: 'object' : undeclared identifier
stdafx.h(44): error C2065: 'obj' : undeclared identifier 

Nahlásit jako SPAM
IP: 88.100.129.–
Scrat0
Návštěvník
24. 9. 2014   #7
-
0
-

#6 Scrat
A jeste jedna vec, pokud dam definici te funkce do program.cpp, tak je kod taky funkcni, takze problem by mel byt v stdafx.h.

Nahlásit jako SPAM
IP: 88.100.129.–
Scrat0
Návštěvník
25. 9. 2014   #8
-
0
-

Tak to asi mam, pomohlo toto:

class object; //forward incomplete declaration 

Nahlásit jako SPAM
IP: 88.100.129.–
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, 39 hostů

Moderátoři diskuze

 

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