Форвардная декларация для структуры в C ++

0

следующий мой заголовочный файл

#ifndef _ASYNCHRONOUSCLASS_H
#define _ASYNCHRONOUSCLASS_H
#include "stdafx.h"
#include <windows.h>

typedef int (*functionCall)(void *);
typedef void * voidPtr;

class  AsynchronousFunction{    
//int returnVal; 
//functionCall fCall;
//voidPtr param;
//HANDLE m_hEvent;

struct pImpl;
pImpl* m_pImpl;

public:
    AsynchronousFunction(functionCall fCall, voidPtr param);
    ~AsynchronousFunction();
    void functionExecuter();
    int result();

protected:
private:    
};
#endif

В файле cpp я хочу реализовать структуру, содержащую следующие данные.

*//int returnVal;* 
*//functionCall fCall;*
*//voidPtr param;*
*//HANDLE m_hEvent;*

Как я могу это реализовать? Что было бы подходящим, форвардная декларация или реализация указателя?

  • 1
    Я бы использовал предварительную декларацию. Не могли бы вы сделать pointer implementation понятной?
  • 0
    В указателе на реализацию вы можете определить указатель некоторого типа, но это реализация в отдельном файле. Но я не уверен, как реализовать прямое объявление или указатель на реализацию. Не могли бы вы объяснить, как это сделать с помощью предварительной декларации?
Теги:
struct
visual-c++
forward-declaration

1 ответ

1
Лучший ответ

В одной единице перевода вам нужно будет указать определение типа. Это будет выглядеть так:

struct AsynchronousFunction::Impl {
   // members and functions...
};

Обратите внимание, что я переименовал pImpl в Impl, то p в идиомы для указателя, член в классе, содержащем бы Impl* pImpl; ,

  • 0
    Большое спасибо. Как инициализировать значения в файле .cpp и использовать их. Потому что таким образом эта структура становится глобальной структурой в файле cpp. не так ли?
  • 1
    @Zarco: Это определение типа , а не экземпляра, и оно не на уровне пространства имен, а вложено в AsynchronousFunction . Конструктор AsynchronousFunction должен будет выделить объект и предоставить значения, необходимые внутри типа, как и для любого другого объекта-члена.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню