2011-08-28 35 views
0

我想构造一个具有未知数量的行2列 像C“通用”结构打造

struct s 
{ 
    cinst char*** s; 
} 
const char* str1[][2] = {"1","2", 
         "3","4", 
         "5","6"}; 
s s1 = {str1}; 
const char* str2[][2] = {"1","2", 
         "3","4"}; 

s s2 = {str2}; 

中的代码compilation.How失败阵列的结构,我可以解决这个问题?

+1

当您的数组是二维数组的字符串时,初始化列表的RHS是一维的。 – John

回答

2

除了属于同一类型

您的问题是,str1的类型和结构体成员s不兼容

  • str1是类型const char*[][2]
  • 该结构构件的类型为const char***
  • 01的

强制编译器采用str1的类型是const char ***解决您的眼前问题,即程序编译和“作品”,但你真的需要理解数组不是指针指针不是数组 。请参阅c-faq site的第6部分。

struct s 
{ 
    const char*** s; 
}; 
const char* str1[][2] = {"1","2", 
         "3","4", 
         "5","6"}; 
struct s s1 = {(const char ***)str1}; 
const char* str2[][2] = {"1","2", 
         "3","4"}; 

struct s s2 = {(const char ***)str2}; 
+2

这是C.结构类型名称不会自动typedefed! – celavek

+0

谢谢@celavek:你说得对。邮政忍者编辑,以反映这一点。 – pmg

+0

Whynot只是一个typedef?此外,为什么当初始化器仍然在1维(2个元素字符)时有三个间接关系? – John

0

嗯,这是不是C.(并有一个分号失踪)

的struct {...};不引入“s”类型,它是而不是的一个typedef。 例如,你不能使用: struct s {...}; s my_thing; (即使你添加缺少的分号) 也许你在混淆C和C++?

-2
struct s 
{ 
    cinst char** s; 
}; 
const char str1[][2] = {"1","2", 
       "3","4", 
       "5","6"}; 
s s1 = {str1}; 
const char str2[][2] = {"1","2", 
       "3","4"}; 

s s2 = {str2}; 

删除第三个间接/解除引用将解决此问题。

从错字 cinst和失踪分号和假设(没有让我们知道) sstruct s
+0

-1用于提供不编译的代码;更糟的是,它不尊重有关语言的基本语法。你用什么语言呈现你的程序? – celavek

+0

需要我几分钟的时间才能将其传递到我的编译器中,因为发布的代码需要将标题与主体分离。它解决了OP的语法缺陷。 – John

+0

对不起,你的回答没有解决任何OP的问题。这显然是错误的。老实说,这个借口很蹩脚。 – celavek