2015-05-28 5 views
-2

Посмотрел на несколько других вопросов и ответов, но я не могу понять, как применить его к моей ситуации.Инициализировать переменную const struct

Вот мои настройки:

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. pin член const, так что вы не можете назначить на него, за исключением инициализаторе.

  2. Член pin, не является указателем, поэтому assgning malloc() он не собирается компилироваться правильно.

Я думаю, что вам нужно удалить const из struct поля, что не имеет никакого смысла вообще. Если вы хотите предотвратить его случайное изменение, вы делаете экземпляр structconst, а не членом.

+0

... и исправить? – Adjit

+0

Я использую Arduino, поэтому он меня смущает, потому что он может использовать C или C++. Так что, честно говоря, я не уверен. – Adjit

+0

Код, который вы отправили, скорее всего, C++, нет ** нового ** оператора в c и, на мой взгляд, оператор просто сумасшедший ---. Но он должен использоваться в C++, он существует, потому что, когда вы выделяете класс C++ динамически, вам не нужно явно вызывать конструктор, вместо этого вы просто используете оператор ** new ** и освобождаете ** новую ** память требуется оператор ** delete **. –

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++ это просто бессмысленный шум.)

Смежные вопросы