【问题标题】:(c++) Declaring a class member in a class(c++) 在类中声明类成员
【发布时间】:2012-05-15 13:26:48
【问题描述】:

我正在尝试在每个 CClient 类中创建一个 CBuffer 成员,如下所示:

#ifndef CCLI_INC
#define CCLI_INC
#include "CBuffer.h"
#include "main.h"

    class CClient
    {
    private:

        CBuffer *m_buffer;


    public:
        CClient();



    };

但是这段代码给了我

 error C2143: syntax error : missing ';' before '*'
 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

虽然我已经包含 cbuffer.h 头文件,但它给出了这个奇怪的错误..

【问题讨论】:

  • CBuffer.h 中有什么?如果 CBuffer 未知,您将收到此错误。

标签: c++ class declare


【解决方案1】:

转发声明CBuffer 并丢失include

#ifndef CCLI_INC
#define CCLI_INC
#include "main.h"
class CBuffer;
class CClient
{
private:

    CBuffer *m_buffer;
public:
    CClient();
};

【讨论】:

  • 是的,谢谢它没有给出任何错误。你能解释一下我为什么要重新定义类吗?
  • @deniz 你没有重新定义这个类,只是声明它。当您仅将其用作指针、参数或返回类型时,您不需要完整的定义,而只需告诉编译器具有该名称的类存在。在可能的情况下,前向声明应优先于包含。
  • 我应该在我将使用的每个文件上声明它吗?顺便说一句,main.h 包含所有带有#pragma once 的头文件。
  • @deniz 如果可以的话,是的。总是更喜欢前向声明而不是包含。请参阅此答案以了解您应该这样做的原因 - stackoverflow.com/questions/9906402/…
猜你喜欢
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 2015-01-18
  • 1970-01-01
相关资源
最近更新 更多