首页 > 解决方案 > 即使在使用警卫后也不能使用在另一个类中定义的结构

问题描述

我正在尝试在另一个类中使用一个类的结构。我的第一堂课是这样的:

Class1.h

#ifndef CLASS1_H
#define CLASS1_H

class Class1
{
public:
    Class1();
    ~Class1();

    struct St{
        int x;
    }

    St struct1;

private:

};

#endif

现在在第二类的标题中,我想使用这个结构和变量。

类2.h

#ifndef CLASS2_H
#define CLASS2_H

#include "Class1.h"

class Class2
{
public:

    Class2();
    ~Class2();

    St struct2;

private:

};

但是,它说:

标识符“St”未定义。

当我以这种方式使用它时:

Class1::St struct1;

错误消失了。我的代码有什么问题?

标签: c++classstructcompiler-errors

解决方案


我的代码有什么问题?

问题是St嵌套类。它的完全限定名称是::Class1::St1. 在 的范围内Class2,非限定名称查找不使用 的范围Class1,因此不会St找到 的声明。

您可以通过执行以下操作来解决此问题:

当我以这种方式使用它时:

Class1::St struct1;

错误消失了。


推荐阅读