Avatar billede rasmusn Nybegynder
12. juli 2004 - 11:11 Der er 5 kommentarer og
1 løsning

#include ,#pragma once, #ifndef problem

Hejsa

Jeg har en klasse (CEPSSimDlg) der har en attribut af en anden klassetype (CSerialCom). Denne er lavet som private i CEPSSimDlg klassen. For at få adgang fra CSerialCom til CEPSSimDlg, har jeg givet den følgende attribut:

CEPSSimDlg* m_pPar;

Når jeg bruger m_pPar kan compileren ikke finde ud af hvad m_pPar er, den skriver at det ikke er en pointer til en klasse/struct/union. Jeg er ret sikker på problemet ligger i hvilke filer der skal inkluderes hvor. Hver af de to klasser har en .h og en .cpp fil.
Men hvor skal hvad inkluderes ?
Skal jeg benytte #ifndef, #define, #endif ?
Da det er et VC .net 2003 projekt findes linien "#pragma once" i alle header filer, kan det betyde noget ?
Håber nogen kan hjælpe.
Avatar billede arne_v Ekspert
12. juli 2004 - 11:17 #1
Man skal altid bruge:

#ifndef FOOBAR_H
#define FOOBAR_H
...
#endif

eller tilsvarende i foobar.h

Jeg er ikke sikker på at jeg forstå dit spørgsmål.

Mit gæt er at du leder efter en forward erklæring:

class B;

class A
{
  private:
      B *b;
};

class B
{
  private:
      A *a;
};
Avatar billede rasmusn Nybegynder
12. juli 2004 - 11:21 #2
jeg har også prøvet at indsætte #ifndef osv. men det hjælper ikke.

Det ser således ud:

CEPSSimDlg
{
...
private:
CSerialCom m_cSerialCom;
}

class CSerialCom
{
...
private:
CEPSSimDlg * m_pPar;
}

Og når jeg så bruger m_pPar ved den ikke hvad det er
Avatar billede rasmusn Nybegynder
12. juli 2004 - 11:29 #3
Med hensyn til forward erklæring så har jeg også prøvet det, mine h filer ser således ud:

// EPS SimDlg.h : header file

#ifndef EPS_SIMDLG_H
#define EPS_SIMDLG_H

#include "MySocket.h"
#include "MyTime.h"
#include "SerialCom.h"
#include "afxwin.h"

#pragma once

class CSerialCom;

class CEPSSimDlg : public CDialog
...

#endif

// SerialCom.h : header file
#ifndef SERIALCOM_H
#define SERIALCOM_H

#pragma once

// CSerialCom command target

class CEPSSimDlg;

class CSerialCom
...

#endif
Avatar billede segmose Nybegynder
15. juli 2004 - 09:13 #4
// vil en forward declaration ikke virke?
class CSerialCom;

CEPSSimDlg
{
...
private:
CSerialCom m_cSerialCom;
}

class CSerialCom
{
...
private:
CEPSSimDlg * m_pPar;
}
Avatar billede rasmusn Nybegynder
15. juli 2004 - 09:25 #5
Nu har jeg fundet fejlen, det var ikke en forward erklæring der skulle til, men fordi jeg brugte en medlemsvariabel i en static metode, så kunne compileren ikke finde ud af hvad det var for en variabel, selvfølgelig.
Tak for svarene.
Avatar billede rasmusn Nybegynder
16. juli 2004 - 08:37 #6
løst
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Dynamicweb Software A/S

Solution Architect

LB Forsikring

Salesforce udvikler

MAN Energy Solutions

Principal Expert DevOps

PensionDanmark

ML Engineer