Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++ 使用typeid警告未使用的变量_C++_Templates_Language Lawyer - Fatal编程技术网

C++ 使用typeid警告未使用的变量

C++ 使用typeid警告未使用的变量,c++,templates,language-lawyer,C++,Templates,Language Lawyer,我为typeinfo编写了一个小包装器,以便在编译时更容易地获得变量的typecode: template<typename DataType> class TypeInfo { public: static const char* typecode() { DataType TypedVariable = 0; const char* code = typeid(TypedVariable).name(); retu

我为
typeinfo
编写了一个小包装器,以便在编译时更容易地获得变量的typecode:

template<typename DataType>
class TypeInfo
{
public:
    static const char* typecode()
    {
        DataType TypedVariable = 0;
        const char* code = typeid(TypedVariable).name(); 
        return(code);
    };
};
模板
类类型信息
{
公众:
静态常量字符*typecode()
{
数据类型TypedVariable=0;
const char*code=typeid(TypedVariable).name();
返回(代码);
};
};
我是这样使用它的:

const char*code=TypeInfo::typecode();

它编译得非常好,工作正常,但我得到了警告

src/common.hh(153): warning: variable "TypedVariable" was set but never used
          detected during:
            instantiation of "char TypeInfo<DataType>::typecode() [with DataType=r32]"
...
src/common.hh(153):警告:设置了变量“TypedVariable”,但从未使用过
在以下期间检测到:
“char TypeInfo::typecode()[数据类型为r32]的实例化”
...
我想知道为什么在变量上“调用”
typeid()
不算作使用它。我知道这是一个已定义的关键字,但我仍然对获取变量类型不算作使用它而感到恼火。 编译是使用CUDA 9.2的
nvcc
完成的。也许这是CUDA特有的东西

谢谢你的帮助:)

//编辑: 我犯了一个错误,没有返回完整字符*,因为我只使用普通类型!谢谢你让我意识到了打字错误!我还添加了模板定义。我忘了把它抄过来

因为您不使用
TypedVariable
的值。您只需使用它的类型(您可以通过将初始化重写为:

        char const * const code = typeid(DataType).name();
因为您不使用
TypedVariable
的值。您只需使用它的类型(您可以通过将初始化重写为以下内容来获取它的类型):

        char const * const code = typeid(DataType).name();

您只需使用
typeid(DataType)
,就可以完全摆脱
TypedVariable
。既然
TypeInfo
没有状态,为什么
typecode()
不是一个自由函数呢?您知道
typeid(foo).name()
通常不仅仅由一个字符组成?请注意,此函数只返回
typeid
名称的第一个字母。这对我来说似乎很不寻常。你确定这就是你要做的吗?@J.Doe从错误消息中可以看出,
TypeInfo
显然是一个模板。@MartinBonner哦,谢谢,我一定读过头了。更改了我的评论。你只需使用
typeid(DataType)
就可以完全摆脱
TypedVariable
。既然
TypeInfo
没有状态,为什么
typecode()
不是一个自由函数呢?你知道
typeid(foo).name()
通常不仅仅由一个字符组成?请注意,此函数只返回
typeid
名称的第一个字母。这对我来说似乎很不寻常。你确定这就是你要做的吗?@J.Doe从错误消息中可以看出,
TypeInfo
显然是一个模板。@MartinBonner哦,谢谢,我一定读过头了。更改了我的评论。
#include#include int main(int argc,char const*argv[]){char const*const code=typeid(float).name();printf(“%s\n”,code);return 0;}
不编译…@meetaig-它对我有效:。您的错误消息是什么?
$gcc main.cpp-o main.out/tmp/ccjzm36x.o:在函数“main”:main.cpp:(.text+0x10)中:未定义对'typeinfo for float'collect2的引用:错误:ld返回1退出状态
我正在使用gcc 4.9。3@meetaig您需要<代码> G++Meal.CPP< /代码>——GCC和G++之间的区别是后者在C++运行库中链接……包括Type信息对象用于构建类型。(我使用的是GCC 4.84)
#include#include int main(int argc,char const*argv[]){char const*const code=typeid(float).name();printf(“%s\n”,code);return 0;}
不编译…@meetaig-对我有效:。您的错误消息是什么?
$gcc main.cpp-o main.out/tmp/ccjzm36x.o:在函数“main”:main.cpp:(.text+0x10):未定义对'typeinfo for float'collect2的引用:错误:ld返回1退出状态
我正在使用gcc 4.9。3@meetaig您需要<代码> G++Meal.CPP< /代码>——GCC和G++之间的区别是后者在C++运行库中链接……包括Type信息对象用于构建类型。(我使用的是GCC 4.84)