C++ GCC编译错误:声明‘;斯特伦&x2019;必须是可用的
我的问题是,当我想制作一个下载的库时,我会从中得到一些奇怪的编译错误,而编译器要求更正的代码似乎就是正确的 错误都是这样的: 目录h:96:错误:没有 依赖于 模板参数,所以是一个声明 “strlen”的名称必须可用 以下是第96行的代码:C++ GCC编译错误:声明‘;斯特伦&x2019;必须是可用的,c++,gcc,compiler-errors,C++,Gcc,Compiler Errors,我的问题是,当我想制作一个下载的库时,我会从中得到一些奇怪的编译错误,而编译器要求更正的代码似乎就是正确的 错误都是这样的: 目录h:96:错误:没有 依赖于 模板参数,所以是一个声明 “strlen”的名称必须可用 以下是第96行的代码: GaCatalogueEntry(const char* name, T* data) { if( name ) { _nameLength = (int)strlen( name ); // LINE 96
GaCatalogueEntry(const char* name, T* data)
{
if( name )
{
_nameLength = (int)strlen( name ); // LINE 96
// copy name
_name = new char[ _nameLength + 1 ];
strcpy( _name, name ); // LINE 100: similar error
_data = data;
return;
}
_name = NULL;
_nameLength = 0;
_data = NULL;
}
如何修复这些编译错误?代码有缺陷。您可能缺少一个
#include
如果不想更改代码,请将
-fppermissive
添加到编译器选项中。(请参阅。)您可能只需要包含包含strcpy和strlen库函数的标题
#include <string.h>
#包括
或者(最好是C++)
#包括
在C++中,String()函数是字符串库的一部分,它看起来几乎不包括头文件。
包括在任何地方吗
include <string.h>
包括
如果没有,请尝试添加它,看看是否可以解决问题
必须提供“strlen”声明
包含string.h
或
(C++)以声明strlen()
是,问题是缺少头文件。但是我认为错误消息并不像java这样的语言那么重要。在本例中,由于代码是模板的一部分,导致错误的原因有些模糊。编译器在模板中发现了一个未识别的符号,如果未识别的符号依赖于模板参数t(例如,如果该符号类似于t::dosomething()),则在模板实际实例化之前,该符号甚至不会导致错误。似乎您有一组名称匹配的全局变量.*
,这些名称是为实现保留的。(.[a-z].
适用于局部变量和类成员等非全局名称)我认为它们不是全局变量,而是成员变量。我猜gacataloteentry是模板类中的一个成员函数。但你是对的,使用包含下划线前缀的命名约定是危险的。对于成员变量,最好使用m_u前缀或u后缀。更好!(您必须使用std::strlen()而不仅仅是strlen)。
include <string.h>