繁体   English   中英

对构造具有相同名称的类感到困惑

[英]confused about struct an class with same name

我正在查看一些c ++代码,并且遇到一个我不理解的问题。 我有多个cpp文件,其中main.cpp具有:

#include <iostream>
#include "classtest.h"
#include "test2.h"

using namespace std;

int main() {
foo test;
test.b=5;
...

查看includes, test2.h为空,而test2.cpp包含以下内容:

struct foo{
    int a;
};

包含的另一个头文件classtest.h包含以下内容:

using namespace std;

class foo{
public:
    int a;
    int b;
};

如您所见,有一个同名的类和结构。 我的问题是:为什么在我的主要方法中键入foo是结构而不是类? 它没有在头文件test2.h定义,如何main访问它? 第二个问题:给定foo是结构体(我正在使用eclipse并看到它将鼠标光标放在其上),如何访问结构中不存在的字段b 抱歉,但是我在C ++中还是个新手,我需要澄清这个疑问。 谢谢。

除了#include <iostream> ,如果您手动替换#include ,则最终将其用于main.cpp

#include <iostream>
using namespace std;
class foo{
public:
    int a;
    int b;
};
using namespace std;
int main() {
foo test;
test.b=5;

因此,很明显fooclass 这里根本没有任何可疑的事情。

您正在从classtest.h而不是从test2.cpp看到class foo 在C ++中,除了默认的成员访问权限外, classstruct之间没有区别(对于struct, publicstruct, for来说是私有for )。

这就是为什么在实例foo有成员b的原因。 代码编译和链接良好的原因是因为两个foo没有同时定义。 每个翻译单元仅定义一个。

为什么在我的主要方法中键入foo是结构而不是类?

不是test2.cpp中定义的foo 您包括来自classtest.h的定义,所以这就是main使用的定义。

它没有在头文件test2.h中定义,如何主访问它?

它没有,并且它不能访问未包含的定义。

第二个问题:给定foo是结构

这个前提是错误的。

如何访问结构不存在的字段b?

因为,正如我们所得出的结论, foo是在classtest.h中定义的。


请注意,如果将main.cpptest2.cpp的目标文件链接在一起,则foo会有两个冲突的定义。 因此,该程序将违反一个定义规则 ,并且格式不正确

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM