一些结构重新定义错误

时间:2014-04-05 19:20:36

标签: c++ data-structures struct

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

....是的,这不是一个函数,我应该把它放在函数中吗?

1 个答案:

答案 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;