【问题标题】:Forward Declaration for a Struct in C++C++中结构的前向声明
【发布时间】:2014-02-24 03:56:55
【问题描述】:

下面是我的头文件

#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;*

我该如何实现呢?什么是合适的,前向声明或指针实现?

【问题讨论】:

  • 我会使用前向声明。你能把pointer implementation说清楚吗?
  • 在指向实现的指针中,您可以定义某种类型的指针,但它是在单独的文件中实现的。但我不确定如何实现前向声明或指向实现的指针。你能解释一下如何使用前向声明吗?

标签: c++ visual-c++ struct forward-declaration


【解决方案1】:

在单个翻译单元中,您需要提供类型的定义。它看起来像:

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

请注意,我将pImpl 重命名为Impl,成语中的p 是指针,包含类中的成员将是Impl* pImpl;

【讨论】:

  • 非常感谢。如何初始化 .cpp 文件中的值并使用它们。因为这样一来,这个struct就变成了cpp文件中的一个全局struct。不是吗?
  • @Zarco: 那是一个type的定义,不是一个实例,它不在命名空间级别,而是嵌套在@987654326里面@。 AsynchronousFunction 的构造函数需要分配对象并提供类型内部所需的值,就像任何其他成员对象一样。
  • 在有两个参数(fCall和param)的构造函数中 m_pImpl = new Impl; m_pImpl->fCall = fCall; // 来自构造函数作为参数 m_pImpl->m_hEvent = CreateEvent( NULL , true , false , NULL); m_pImpl->参数=参数; // 来自构造函数作为参数 m_pImpl->returnVal = NULL;现在我可以通过 m_pImpl 指针访问这些结构值,因为它指向 Impl 结构的对象。这是正确的吗?
  • 我认为是这样,这取决于您如何定义struct。此外,您可以为 Impl 类型本身提供一个构造函数,然后外部类型只需要为 new 提供适当的参数。
  • 太棒了。 Impl 本身的构造函数非常好。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2023-03-12
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多