0

好的,所以我在 Visual Studios C++ (C++/CLI) 中的前向声明遇到了麻烦。代码如下:

#include "B.h"

#ifdef B_H
#pragma once

public ref class A : public base_class  //base_class is public, memory managed 
{
    B^ b;
}

#endif

溴化氢

#define B_H

#pragma once

ref class A;

ref class B 
{
    A^ a;
}

#include "A.h"

#ifdef/#pragma 守卫应该保持 *.h 不被读取两次,并强制 bh 首先被读取,并且从编译器输出中我很确定它们是。(我什至不确定#pragma once 和#include 放置是否需要#ifdef/#define)

但是,编译器抱怨路径/啊:错误 C2011:“类”类型重新定义。查看文件路径/Bh

我应该对 A 的前向声明做些什么,因为它是实际类定义中的派生类,还是我在吠叫错误的树?

4

1 回答 1

3

需要进行两项更改:

  1. 在类定义的右大括号后添加分号。
  2. 在 Ah 中,将 移动#pragma once到文件的第一行。#ifdef把这个放在街区里会搞砸的。

另外,请注意,更简单的方法是不让任何一个头文件包含另一个,并在两个文件中使用前向声明:

啊:

#pragma once
ref class B;
public ref class A : public base_class  //base_class is public, memory managed 
{
    B^ b;
};

溴化氢

#pragma once
ref class A;
ref class B 
{
    A^ a;
};
于 2012-06-01T18:32:54.203 回答