Archief - C++ klasse niet herkend?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

VinceMañana

Legacy Member
Ik ben bezig met een klein programmatje te schrijven in c++, maar om een of andere reden wil Visual Studio mijn eigen klasse niet herkennen.

Code:
#pragma once

#include <string>
#include <boost\date_time\gregorian\gregorian.hpp>
#include "Gebruiker.h"

using namespace std;
using namespace boost;

class Bericht
{
private:
	string body;
	boost::gregorian::date datum;
	Gebruiker* verzDoorGebruiker;
	Gebruiker* verzAanGebruiker;
public:
	Bericht(string body, boost::gregorian::date datum, Gebruiker* verzDoorGebruiker, Gebruiker* verzAanGebruiker*);
	~Bericht(void);

	string getBody();
	boost::gregorian::date getDatum();
	Gebruiker* getVerzDoorGebruiker();
	Gebruiker* getVerzAanGebruiker();

	void setBody(string body);
	void setDatum(boost::gregorian::date datum);
	void setVerzDoorGebruiker(Gebruiker* gebruiker);
	void setVerzAanGebruiker(Gebruiker* gebruiker);
};

Bij de private datamembers valt de compiler niet over het gebruik van "Gebruiker*" maar bij de functiedeclaraties krijg ik een "Error 13 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int bericht.h 24" :wtf:

Iemand die weet wat het probleem is? Natuurlijk heb ik de klasse Gebruiker ook gedefinieerd :p

MAXXUR

Legacy Member
Gebruikt ge ergens in de file Gebruiker.h ook de klasse Bericht? If so, zit ge met een circular dependency en zult ge ergens een forward declaration moeten plaatsen in 1 van de 2.

VinceMañana

Legacy Member
MAXXUR zei:
Gebruikt ge ergens in de file Gebruiker.h ook de klasse Bericht? If so, zit ge met een circular dependency en zult ge ergens een forward declaration moeten plaatsen in 1 van de 2.

Ha dit kan het wel zijn. Ik was al aan het denken dat dit een probleem kon vormen, maar dat ze dat dan duidelijker naar voren laten komen ipv hun cryptische fouten :p

Ik zal de structuur even aanpassen of een forward declaration proberen :)

Mijn dank is groot! :hug:

Raanº³

Legacy Member
Beste wat je kunt doen is natuurlijk gebruik maken van #define tags ;)

Code:
#ifndef HEADER_H
#define HEADER_H

<code>
#endif

iets in die zin, zodat je bvb niet 2x dezelfde header per ongeluk zou includen.
Kijk ook eens naar je code (als je de header kunt posten, zoveel te beter), want heb ooit ook eens die fout gekregen omdat er iets in mijn header op de verkeerde plaats stond welke Visual Studio's compiler niet wou 'erkennen' maar G++ bvb wel :)

Raanº³

Legacy Member
Tyfius zei:
Hij gebruikt in zijn code reeds een #pragma once, dus dat is niet nodig. [...]
Yep, maar...
Include guards are standard C and C++ coding styles, so they are portable. Pragma once is not standard, so it is not as portable as include guards are.[...]
[ Bron ]

Dat is voor mij al een deftig genoeg reden om het niet te gebruiken ;)

Tyfius

Legacy Member
Dat maakt voor hem niet uit, de Microsoft C++ compiler ondersteund het wel, net zoals GCC, Intel en alle andere major compilers. (pragma once - Wikipedia, the free encyclopedia) Net zoals Wikipedia aangeeft kan je beide zelfs combineren. Dan heb je én de optimalisatie van een #pragma once, én de portability van de #include approach.

Maar het punt was dat jouw voorgestelde oplossing zijn probleem niet oplost. Waarschijnlijk gaat het om een issue met die forward declaratie, maar dan vind ik de foutmelding wel cryptisch. Het is al een aantal jaar geleden dat ik met C++ gewerkt heb, maar ik meen mij te herinneren dat men toen wel meer en duidelijkere informatie gaf in verband met forward declarations.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan