Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 强制编译器显示变量的类型_C++_C++11_Compilation_Compiler Errors - Fatal编程技术网

C++ 强制编译器显示变量的类型

C++ 强制编译器显示变量的类型,c++,c++11,compilation,compiler-errors,C++,C++11,Compilation,Compiler Errors,我正在编写一个相当大的项目,其中我面临 错误:“CRoom room”重新声明为不同类型的符号 就在 class CRoom { ..... } room("test"); 问题是我搜索了整个项目文件,但在其他任何地方都找不到这样的变量。有没有可能强迫编撰人告诉我它在哪里找到了这种定义的原始位置?如果不可能,至少可以在comfile时间显示原始变量的类型(请注意,此程序有太多其他错误,我无法运行它并显示变量类型。我希望编译器为我显示类型)。为了让编译器显示某个类型,我通常使用这样的即兴课: t

我正在编写一个相当大的项目,其中我面临

错误:“CRoom room”重新声明为不同类型的符号

就在

class CRoom
{
.....
} room("test");

问题是我搜索了整个项目文件,但在其他任何地方都找不到这样的变量。有没有可能强迫编撰人告诉我它在哪里找到了这种定义的原始位置?如果不可能,至少可以在comfile时间显示原始变量的类型(请注意,此程序有太多其他错误,我无法运行它并显示变量类型。我希望编译器为我显示类型)。

为了让编译器显示某个类型,我通常使用这样的即兴课:

template <class T>
struct show_type;
模板
结构显示类型;
然后,在需要学习类型的代码中,您可以执行以下操作:

show_type<decltype(room)> t;
显示类型t;

编译此文件,编译器将合理地抱怨未定义
show\u type
;但是错误消息将有助于说明尝试实例化的
T

这可以通过声明类模板而不执行来轻松完成

template<typename T>
struct dump;

dump<decltype(room)> d;
模板
结构转储;
倾倒区d;
这将分别在gcc和clang上产生以下错误消息

error: aggregate 'dump<CRoom> d' has incomplete type and cannot be defined
error: implicit instantiation of undefined template 'dump<CRoom>'
错误:聚合“dump d”的类型不完整,无法定义
错误:未定义模板“dump”的隐式实例化

另一种允许程序编译的方法是使用

#包括

std::为什么要费心定义
显示类型
并使用
::类型
<代码>模板结构显示类型;显示t型非常感谢。我意识到可变房间是双倍的,这仍然让我感到困惑。你知道如何找到它的原始位置吗?@barej不是从编译器那里得到的,但大多数IDE都有“转到定义”功能。@barej或者,现在你知道了类型,即使是像
double*room
这样的正则表达式也可能找到一些东西。@T.C.你说得对,更新了。我觉得缩写形式有一些问题,但我现在似乎无法重现。另一个
room
不必是变量,也可以是
typedef
或函数。如果您使用的是
g++
@Wintermute,那么错误消息应该会告诉您上一次声明的位置刚好低于您发布的位(“注意:上一次声明…”)。这是一个函数。问题是这个房间是在另一个图书馆使用的。这就是我找不到它的原因。
#include <boost/type_index.hpp>

std::cout << boost::typeindex::type_id_with_cvr<decltype(room)>().pretty_name() << '\n';