squ*_*dge 1 c++ struct pointers typedef
我确定这是一个脑屁,但我错过了一些东西,谷歌搜索似乎没有提出任何东西.
struct item
{
int a;
int b;
int c;
};
typedef item *itemcatalog;
Run Code Online (Sandbox Code Playgroud)
因此'itemcatalog'只是一个'item'的数组.
const item items[] = {{1,2,3},{4,5,6}};
const item *collection = items; // OK
const itemcatalog catalog = items; // "item const *" is incompatible with "itemcatalog"
Run Code Online (Sandbox Code Playgroud)
我们的想法是"itemcatalog"更具描述性,并表明期望一个项目数组而不仅仅是一个指向单个项目的指针.
编辑:修复拼写错误.
在失败的行上,您忘记为该对象命名.
const itemcatalog collection2 = items;
Run Code Online (Sandbox Code Playgroud)
当我们这样做时,我们仍然会收到错误:
foo.cc:14:19: error: cannot initialize a variable of type 'const itemcatalog' (aka 'item *const') with an lvalue of type 'const item [2]'
const itemcatalog catalog = items;
^ ~~~~~
1 error generated.
Run Code Online (Sandbox Code Playgroud)
要解决这个问题,我们需要意识到在这种情况下我们实际上需要两个typedef:
struct item
{
int a;
int b;
int c;
};
typedef item *itemcatalog;
typedef const item *constitemcatalog;
const item items[] = {{1,2,3},{4,5,6}};
const item *collection = items;
const constitemcatalog collection2 = items;
item mutable_items[] = {{1,2,3},{4,5,6}};
const item *collection3 = mutable_items;
const itemcatalog collection4 = mutable_items;
Run Code Online (Sandbox Code Playgroud)
在各种集合对象上,const我们正在应用告诉我们是否可以移动指针.constitemcatalogvs itemcatalog告诉我们是否可以修改指针指向的数据.