Нечетная ошибка C++: тест cpp:15: ошибка: передающая ‘константа *’ как 'этот' аргумент '*' отбрасывает спецификаторы

Реализация для Android немного отличается, так как вам нужно использовать findNodeHandle и сделать ссылку на размытые компоненты. Вот пример кода, который мне подходит:

https://gist.github.com/harixth/d9414a63a859b2e19b13d9915fcaa00c

43
задан Baum mit Augen 30 July 2017 в 20:54
поделиться

4 ответа

Проблема звонит не - const функция test2.test() на const объект test2 от testing::test1.

testing::test1 добирается test2 в качестве параметра const testing &test2. Таким образом в [1 111], test2const. Затем в первой строке функции:

test2.test()

Эти testing::test функция вызвана на [1 114]. Та функция не объявляется с [1 115] в конце подписи, таким образом, это может изменить объект, к этому обращаются (this, указатель неявно передал ему), и даже при том, что это не делает, компилятор принимает так. Позволяя Вам назвать его там, компилятор позволил бы Вам изменить const переменная без явного броска, который C++, как предполагается, не разрешает. Поэтому для объяснения сообщения об ошибке :

test.cpp:15: error: passing ‘const testing’ as ‘this’ argument of ‘int testing::test()’ discards qualifiers

this относится к объекту, на который воздействует функция членства (testing::test), и в этом случае это не const, потому что testing::test не был объявлен с [1 122], и таким образом несоответствие обнаруживается при попытке сделать не - const, указатель (this) относится к const объект (testing), игнорируя const спецификатор .

Для решения этого решите, ли эти testing::test функция должна когда-либо должна быть изменить объект, к этому обращаются (способ, которым это записано теперь, это не делает как все, что это делает return 1, однако который может измениться, таким образом, необходимо думать в том, что его намеченная функциональность). Если это должно, то, очевидно, называя его на const объект плох, хотя можно использовать const_cast, чтобы попросить, чтобы компилятор переопределил это, но это опасно. Если это не должно, затем отметить его const, так, чтобы это можно было назвать на [1 133] объекты также:

class testing{
    int test1() const;
    // ...
}

int testing::test() const {
    // ...
}
68
ответ дан Tom Alsberg 26 November 2019 в 22:55
поделиться

Из-за определения функции членства test1:

int testing::test1(const testing& test2){
   test2.test();
   return 1;
}

Вы являетесь передающими в ссылке константы для переменной test2.

, Который означает, что Вы не можете изменить члена test2 и Вы не можете назвать функцию членства, которая не является константой или не статична.

Вот то, как можно зафиксировать:

int testing::test() const {
   return 1;
}

дополнительная константа в конце говорит компилятору, что Вы не планирование изменения содержания текущего объекта (и если Вы сделаете то Вы получите другую ошибку компиляции).

5
ответ дан Brian R. Bondy 26 November 2019 в 22:55
поделиться

Строка: test2.test ()

вызывает не функцию константы, даже при том, что test2 является ссылкой константы. Это - проблема. Можно зафиксировать это путем создания тестирования:: протестируйте функцию константы.

2
ответ дан Himadri Choudhury 26 November 2019 в 22:55
поделиться

тестирование:: test1 (константа testing& test2), ожидает переданный объект быть константой, и это даст Вам ошибку или при изменении значений, он - переменные, или получают доступ любые методы этого, которые явно не определяются как константа

Начиная с теста (), метод на самом деле не изменяет данных, лучшая практика должна установить его константа, следующим образом:

class testing{
   int test() const;
   int test1(const testing& test2);
};

int testing::test() const {
   return 1;
}

, С другой стороны, просто удаляют константу слова при определении аргументов в пользу test1 (), и это позволит Вам получать доступ к любому из методов переданного объекта на Вашем досуге.

1
ответ дан goldPseudo 26 November 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: