gpt4 book ai didi

c++ - 奇怪的 VS2012 C++ 解析

转载 作者:行者123 更新时间:2023-11-28 00:53:27 24 4
gpt4 key购买 nike

连接器.hpp

#ifndef __CONNECTOR_HPP_
#define __CONNECTOR_HPP_

#include <a/b/c/connection.hpp>

namespace a {
namespace b {
namespace c {

class connector {
public:
explicit connector(const int port);
void run();
void stop();
};

}
}
}
#endif

connection.hpp

#ifndef __CONNECTION_HPP_
#define __CONNECTION_HPP_

#include <a/b/c/connector.hpp>

namespace a {
namespace b {
namespace c {

class connection {
private:
connector owner_; //line 42

};

}
}
}

#endif

这些简单的类在 cpp 文件中有一些简单的(空的)实现。
当我尝试编译这个时,VS2012 说:

Error 1 error C2146: syntax error : missing ';' before identifier 'owner_' c:\a\b\c\connection.hpp 42 1 test

Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\a\b\c\connection.hpp 42 1 test

问题是 VS 编辑器没有发现任何问题——没有红色下划线等。包含路径设置正确,我添加了 $(SolutionDir)\..\ 到包含,这样我就可以使用像 a/b/c 这样的完整路径而不是相对路径

仍然,这没有编译..但它编译了一次。

问:为什么?

最佳答案

通常那些循环的 #include 指令是致命的。这肯定是这里发生的事情。假设您在其他文件中#include "connector.hpp"。将要发生的是 connector.hpp 将 #include "connection.hpp"。该文件将依次 #include "connector.hpp",但现在这是空操作,因为 connector.hpp 的包含防护已经处于事件状态。您最终得到的是在 class connector 之前定义的 class connection。这是一个问题,因为 class connection 中的数据成员是 class connector 的实例。

为什么 connector.hpp 包含 connection.hpp?

关于c++ - 奇怪的 VS2012 C++ 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12763082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com