struct NAMESTRUCT
{
int ID;
std::string DESC;
};
struct NAMESTRUCT NAME;
NAME.ID = 1;
NAME.DESC = "STUFF";
错误:
IntelliSense: this declaration has no storage class or type specifier
IntelliSense: expected a ';'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2371: 'NAME' : redefinition; different basic types
error C2143: syntax error : missing ';' before '.'
我不知道我做错了什么......请帮忙。
编辑: 这是我的真实代码:
//some includes
struct ERRORTYPES
{
int ID;
std::string DESC;
};
ERRORTYPES UNERROR;
UNERROR.ID = 1;
UNERROR.DESC = "UNKNWON ERROR";
//more code
....是的,这不是一个函数,我应该把它放在函数中吗?
答案 0 :(得分:2)
以下是我发现的一些问题:
不要将struct
用于变量
声明变量时,请使用结构名称:
NAMESTRUCT NAME;
字符变量仅包含1个字符。
你正在分配一个字符串," STUFF" (许多字符),一个字符变量(只包含一个字符)。这称为缓冲区溢出。坏。
将std::string
用于文字字符串。
使用std::string
表示字符串可以让您的生活更轻松。否则你必须处理指针,内存分配和释放。从StackOverlow关于这个主题的问题数量来看,你真的不想走那条路,std :: string要容易得多。
字符串文字是指向字符的指针。
字符串文字,例如" STUFF"是许多字符的序列,具有终止' \ 0'字符,称为C样式字符串。在赋值的右侧(RHS),它们由指向字符序列的指针表示。如果要使用C-Style字符串,则需要char *
(指向字符的指针)变量或char[]
(字符数组)变量。
如果使用指针变量,请记住该赋值仅复制C样式字符串的位置或地址,而不是内容。您必须使用strncpy
复制内容。还记得指针只指向事物。您仍然需要分配内存来保存内容。
如果您使用字符数组变量,请记住为终止' \ 0'分配额外的插槽。 (nul)角色。还要记住在复制到数组之前始终检查源字符串的长度。
功能分配
您可以在两个位置为变量赋值:函数或全局区域。在全局区域中,在定义变量时会发生赋值;否则它必须出现在一个函数中。
编码风格
常见的编码风格是使用所有大写的常量。您应该确定类型名称和变量名称的样式,并希望保持它们不同。例如,类型名称将以大写字母开头,后跟小写:struct Namestruct
,变量名称全部小写:Namestruct name;
。