2015-05-28 94 views
-2

查看了其他几个问题和答案,但我似乎无法弄清楚如何将它应用于我的情况。初始化结构的Const变量

这里是我的设置:

typdef struct sensor { 
    const unsigned char pin; 

    //otherVariables 
}Sensor; 

Sensor *left = new Sensor(); 

void initStruct() { 
    left->pin = 1; //illegal initialization 
} 

从我一直在读我下面的代码似乎是一个可行的解决方案,但我不能靠近我的编译器,所以我无法测试。这看起来不错吗?如果它是错误的,你能提供一个解决方案吗?

void initStruct() { 
    left->pin = malloc(sizeOf char); 
    left->pin = 1; 
} 
+0

您如何提供编译器的输出? – Melon

+0

@Melon:正确阅读问题.. !!! –

+0

'left-> pin = malloc(sizeOf char);'什么?你只能分配内存给指针,而不是'const unsigned char'。 –

回答

0

没有那个代码没有意义。

  1. pinconst所以你不能分配给它除了在初始化。

  2. pin成员,不是一个指针,所以指定malloc()它不会正确编译。

我认为你需要从struct领域,这并没有任何意义可言删除const。如果你想防止意外修改它,你可以使struct实例const,而不是成员。

+0

以及修复程序? – Adjit

+0

我正在使用Arduino,因此它会让我感到困惑,因为它可以使用C或C++。所以坦率地说,我不太确定 – Adjit

+0

你发布的代码很可能是C++,c中没有** new **运算符,我认为运算符只是疯狂---。但它必须在C++中使用,它的存在是因为当你动态地分配一个C++类时,你不需要显式调用构造函数,而只需使用** new **运算符,并释放** new ** ed内存需要**删除**运营商。 –

2

除非有什么奇怪的事情发生,你不需要在这里动态分配。如果类型是聚集,那么你可以简单地初始化它的声明:

Sensor left = {1 /*, other variables */}; 

如果它不是一个汇总,然后const成员将在一个构造函数来进行初始化:

struct Sensor { 
    const unsigned char pin; 
    //otherVariables 

    Sensor(unsigned char pin) : pin(pin) 
     //, other variables 
    {} 
}; 

(我冒昧地删除了奇怪的C风格typedef。在C++中,这只是毫无意义的噪声。)