Вопросы с тегами [const]

4

голосов
3

ответ
188

Просмотры

как найти медиану вектора, если метод Const?

Я создал метод, называемый Collect, который добавляет кучу значений вектора (как показано ниже) аннулируется Median :: Collect (двойной ИГД) {myVector.push_back (геодезический); } Мне нужно создать метод, который вычисляет медиану всех значений I, собранных в векторе в указанном выше способе. Определение функции написано ниже / * Вычисляет медиану данных (нулевые точки) из метода Collect. * / Двойной Медиана :: Вычислить () сопзЬ {} Так что я знаю, что я в первую очередь необходимо отсортировать вектор для того, чтобы найти медиану. Ниже моя попытка: двойная Медиана :: Вычислить () сопзЬ {станд :: сортировки (myVector.begin (), myVector.end ()); двойная медиана; если (myVector.size ()% 2 == 0) {// даже средний = (myVector [myVector.size () / 2 - 1] + myVector [myVector.size () / 2]) / 2; } Еще {// нечетное средний = myVector [myVector.size () / 2]; } Вернуть медиану; } Но я понял, что это не компиляции, так как метод сопзИте, поэтому сортировку значений вектора изменит вектор, который не допускается в константной функции. Так что я должен делать для этого метода?
Sarah
1

голосов
1

ответ
153

Просмотры

Попытка подключения к ROS с помощью rosserial-окон. Ошибка с IP-адресом

Я пытаюсь подключиться к ROS с помощью rosserial окна. Я следую учебник, приведенный на сайте ROS (http://wiki.ros.org/rosserial_windows/Tutorials/Hello%20World) здесь является то, что мой код выглядит следующим образом: // ConsoleApplication1.cpp: Определяет точку входа для консоли приложение. // #include "stdafx.h" #include #include #include "ros.h" #include #include используя зЬй :: строку; INT основных (INT ARGC, _TCHAR * ARGV []) {ROS :: NodeHandle пН; символ * ros_master = "172.17.194.162"; // Error1 Е ( "Подключение к серверу в% s \ п", ros_master); nh.initNode (ros_master); // Error2 Е ( "Рекламное сообщение \ п"); std_msgs :: float32 а; Ros :: Издательство CMD ( "/ TrueVision / throttle_cmd", & а); nh.advertise (CMD); Е ( "Go Car! \ п"); в то время как (1) {нГн. spinOnce (); Сон (100); } Е ( "Все сделано \ п"); возвращать 0; } Это дает мне ошибку E0144 - Const CAHR не может быть использовано для инициализации объекта полукокса C2664 типа - не может преобразовать аргумент 1 из сопзЬ полукокса обугливаться Но это именно то, как это делается в учебнике. не могу понять, что здесь не так.
sdcguy
-1

голосов
2

ответ
44

Просмотры

Присвоение значения в константной

Как присвоить значение в моей сопзИ? В том виде, у меня есть некоторый входной сигнал от проверен и когда значение истинно, мне нужно, чтобы изменить это значение для взаимодействия с веб-сервиса клиента, и если оно ложно, мне нужно, чтобы изменить значение, но я не могу сделать это просто объявляя сопзЬ с новым значением. Я пытался изменить значение непосредственно в сопзЬ, но он не работает Следуйте мой код в CodeSandbox: https://codesandbox.io/s/n08n2m7mpj импорт React, {} useState от «реагировать»; импорт ReactDOM из «реагируют-дом»; импорт Переход от "@ материал-Ui / ядра / Switch"; импорт "./styles.css"; Функция App (реквизита) {сопз initialFormState = {datRev: "01/05/2019", empRev: "1", numCad: "5", numEmp: "1", obsRev: "ReactJS сделано", sitRev: " проверено); Const значение = "N"; } Console.log ( "Значение:" + значение); setEquipRevisao ({... equipRev, [имя]: значение}); console.log ( "sitCkl:" + equipRev.sitCkl); }; вернуться (редактирование Здравствуйте CodeSandbox Start, чтобы увидеть некоторые магии произойдет!); } Const RootElement = document.getElementById ( "корень"); ReactDOM.render (, RootElement); Я надеюсь, что «event.target.checked», правда, он изменяет значение sitCkl от equipRev к «S» и, когда она ложна, она изменяет значение sitCkl от equipRev до «N». вернуться (редактирование Здравствуйте CodeSandbox Start, чтобы увидеть некоторые магии произойдет!); } Const RootElement = document.getElementById ( "корень"); ReactDOM.render (, RootElement); Я надеюсь, что «event.target.checked», правда, он изменяет значение sitCkl от equipRev к «S» и, когда она ложна, она изменяет значение sitCkl от equipRev до «N». вернуться (редактирование Здравствуйте CodeSandbox Start, чтобы увидеть некоторые магии произойдет!); } Const RootElement = document.getElementById ( "корень"); ReactDOM.render (, RootElement); Я надеюсь, что «event.target.checked», правда, он изменяет значение sitCkl от equipRev к «S» и, когда она ложна, она изменяет значение sitCkl от equipRev до «N».
William
1

голосов
0

ответ
72

Просмотры

ESlint ошибка: Const Ключевое слово зарезервировано в Brakets язь

У меня есть обновление ECMAScript-5 в ECMAScript-6, но он все еще показывает эту ошибку. Я не могу понять, как ее решить.
1

голосов
0

ответ
84

Просмотры

Нарушение сопзЬ корректности [размещения нового] ​​и непредсказуемое поведение

Я прочитал следующее: размещение новых прорывов consts и ссылки? и чтение слайдов из Matthis Крузе на собрании C ++ Я смущен относительно следующего кода структуры U {сопз INT I; }; станд :: вектор В; B.push_back ({1}); B.clear (); B.push_back ({2}); Const INT v = B [0] .i; //
Gabriel
1

голосов
2

ответ
30

Просмотры

Невозможно присвоить зЬй :: LOWER_BOUND возвращаемого значения вектора :: iterater

Перешедшая в функцию: Const станд :: вектор & XV: станд :: вектор :: итератор lowBound = lower_bound (xv.begin (), xv.end (), х); Функция работала нормально, прежде чем я изменил зЬй :: вектор и к константной станд :: вектор & LOWER_BOUND возвращает синтаксическую ошибку во время компиляции, говоря: нет подходящего определяемого пользователем преобразование из «__gnu_cxx :: __ normal_iterator» в «__gnu_cxx :: __ normal_iterator» существует зЬй :: вектор :: const_iterator станд :: lower_bound (станд :: вектор :: const_iterator __first, станд :: вектор :: const_iterator __last, Const поплавка & __ Вэл) Я попытался изменить зЬй :: вектор :: итератор сопзЬ станд :: вектор :: итератор и также пытались зЬй :: вектор :: итератор. Ни один из этих вариантов не похоже на работу. Im извините за беспокойство, ив пытался прибегая к помощи ошибке и не мог придумать ответ.
EvanJ227
1

голосов
1

ответ
47

Просмотры

Правильный способ объявления `` const` повышение :: range`s

При использовании наддува :: any_range, что правильный способ определить, что основной контейнер (если таковые имеются) не должны быть изменены? Например, с помощью шаблона псевдонима, используя диапазон = повышение :: any_range; объявить диапазон, который не способен модифицировать содержимое контейнера или основного «источник данных», она должна быть объявлена ​​как сопз Range MyRange; или Range MyRange; ? Я подозреваю, что первая версия является правильным. Но это гарантированно держать константность контейнера, если, например, я применить любой из форсирования :: адаптеры? Редактировать Из документации, по-видимому, range_iterator metafunction «выводит» константность нижележащего контейнера, объявив диапазон с сопзЬ Т вместо Т. То есть, range_iterator :::: типа const_iterator (если базовый контейнер имеет такой тип элемента) , вместо итератора, чтобы контейнер не может быть изменен с помощью этого итератора. Означает ли это, что Range также использует const_iterators пройти диапазон?
Anakhand
1

голосов
1

ответ
32

Просмотры

Почему передавая массив символов в качестве аргумента в функции и пытаюсь изменить внутри функция показывает ошибку сегментации?

Я объявлен массив символьных переменных, как показано ниже: символ слова [256]; обугливается множественное число [256]; Он принимает входной сигнал внутри основной функции и копий множественного числа переменного, как показано ниже: зсап ( «% S», & слово); зЬгср (множественное число, слово); Вход я предоставил это «Baby». Основной метод вызов другой функции множественного числа, передавая оба переменных в качестве аргументов, как показано ниже: недействительные (множественных слов, множественное число); Вот то, что я хочу сделать с помощью метода множественного числа: недействительные (множественного голец слова [], символ множественного числа []) {символа textToBeAdded [] = «КЭСА»; INT I = StrLen (множественное число); множественное число [I-1] = '\ 0'; множественное число = strcat (множественное число, textToBeAdded); Е ( "Слово% s и множественное% s", слово во множественном числе); Е ( "\ nRule 1 \ п"); } Я не использую символ * и используя символ [], поэтому он должен быть изменяемым. Но он показывает ошибку сегментации во время выполнения. Почему и что я не так делаю?
Kiran Cyrus Ken
1

голосов
1

ответ
198

Просмотры

Javascript Эффективность с константами передаются в качестве параметров?

У меня общий вопрос JavaScript. Я дам вам свой сценарий, а затем задать вам вопрос. Сценарий я делаю таблицу (в настоящее время) более 3000 строк, и она растет на 5-10 каждый день. Я использую яваскрипта плагин для стилизации этой таблицы и добавить полезную функциональность. В настоящее время она занимает 15 секунд, чтобы полностью загрузить страницу, после чего все работает гладко (сортировка, пейджинг и т.д.). Это очень медленная начальная нагрузка, тем не менее. Плагин предлагает способ с меньшим DOM разбором, где вы передаете его массив информации для размещения внутри стола, который я очень заинтригован. Тем не менее, я хочу, чтобы сделать это как можно быстрее, потому что по-прежнему будет массив из 3000 строк (каждая с 11 столбцов, в среднем, 10 символов). Вопрос будет ли значительно быстрее использовать константный JavaScript, чтобы сохранить этот гигантский массив? В частности, делает JavaScript знать не ставить константный на стеке, когда передается в качестве параметра? Кроме того, это просто слишком много для JavaScript, чтобы справиться? Должен ли я отклонить эту идею и начать с AJAX сейчас (что означало бы гораздо медленнее функциональность, но гораздо быстрее Pageload)? Спасибо!
Garrett
1

голосов
3

ответ
136

Просмотры

дизайн Alternate класса для обеспечения правильного указателя типа поведения (указатель на константу)?

Я пишу набор параметризованных классов C ++, и я заинтересован в некоторых из них ведут себя так же, как указатели. В частности, я хочу, чтобы иметь возможность создать объект с постоянным параметром шаблона из объекта с непостоянным параметром шаблона, а не наоборот. Этот пример код должен прояснить свои намерения: Int основного () {MyClass mc_int; MyClass mc_const_int; MyCLASS МС1 (mc_const_int); // Это должно скомпилировать. MyCLASS тс2 (mc_int); // Это должно скомпилировать. MyCLASS MC3 (mc_int); // Это должно скомпилировать. MyCLASS MC4 (mc_const_int); // Это не должно составить. } Я смог достичь этого конкретного поведения, создав следующую иерархию классов (упрощенный для удобства чтения): шаблон класса Base {// ... защищенный: шаблон базы (Const Base & OBJ): _elem (объект. _elem) {} частное: Т _elem; друг Базовый класс; }; шаблонный класс MyClass: общественный Base {// ... общественности: Шаблон MyClass (Const MyClass & OBJ): Base (объект) {}}; И это работает, как ожидалось, но я не совсем доволен этим дизайном, потому что я могу только обнаружить непостоянный параметр шаблона из конструктора, а не из какой-либо другой функции члена. Если бы я хотел, например, создать класс контейнера с методом addAll (), я хотел бы быть в состоянии сделать это: Int основной () {Container c_int; c_int.add (новый INT (1)); c_int.add (новый Int (2)); c_int.add (новый Int (3)); Контейнер c_const_int; c_const_int.addAll (c_int); // Это должно скомпилировать. c_int.addAll (c_const_int); // Это не должно составить. } Но я не знаю, как достичь предыдущего поведения. Кто-нибудь есть идеи для альтернативного дизайна, чтобы достичь того, что я пытаюсь сделать? Кто-нибудь знает ссылку, где эта проблема обсуждается более подробно? Заранее спасибо.
Kanopus
1

голосов
1

ответ
123

Просмотры

Когда сопзИте версию называется?

Я сделал "оператор Т [] (INT I) сопзИте" и "Т & оператор [] (INT I)" для класса А. (и я также попытался его "сопзИте T & оператор [] (INT I) Const" и «Т & оператор [] (INT I) ") оператор печати значение, чтобы определить, какой оператор называется. А а; INT к = а [0]; к = а [0]; Const INT л = а [0]; Результат: три вызовов неконстантного версии. Как я могу назвать константную версию? Должен ли я использовать константный класс? Там нет никаких шансов вызвать функцию, которая является константной версией без использования константного класса?
Gimun Eom
1

голосов
1

ответ
112

Просмотры

Как исправить ошибку при добавлении функции массива после основной?

# include «stdafx.h» # include # include # include с помощью патезрасе; аннулированию FillArray (интермедиат х [50], Const INT размер); аннулированию PrintArray (интермедиат х [50], Const INT размер); INT основных () {Const INT SizeArray = 10; Int А [SizeArray] = {0}; FillArray (А, SizeArray); PrintArray (А, SizeArray); возвращать 0; } Недействительного FillArray (интермедиат х [50], Const INT размер) {для (INT I = 0; я <размер; я ++) {COUT х [I]; }} Пустота PrintArray (интермедиат х [50], Const INT размер) {для (INT I = 0; я <размер; я ++) {соиЬ
GmxTrey
1

голосов
3

ответ
157

Просмотры

Const reference to member or temporary

У меня есть класс, который содержит данные, которые я ожидаю использовать много, так что я подумал, что было бы лучше, чтобы вернуть константную ссылку на него. Однако, учитывая некоторые параметры, я, возможно, потребуется создать новые данные на лету. Я видел, что вы можете вернуться к временному постоянной ссылке, как так: класс Foo {общественность: Foo () {...} // Инициализация данных LARGE_DATA GetData (Ий param1, BOOL param2) {если (...) {// Для некоторой сумасшедшей функции параметров LARGE_DATA NewData = ...; // Создание новых данных и вернуть его возврата NewData} возвращения данных; // Обычно просто использовать значение по умолчанию} частные: данные LARGE_DATA; }; недействительный бар () {Foo е; Const LARGE_DATA & данные = f.getData (); ... // Данные процесса (только для чтения)}, но это, кажется, что это будет сделать копию данных. Я хотел бы сделать что-то вроде этого: класс Foo {общественности: Foo () {...} // Инициализировать данные Const LARGE_DATA & GetData (BOOL param1, BOOL param2) {если (...) {// Для некоторой сумасшедшей функции параметров LARGE_DATA NewData = ...; // Создание новых данных и вернуть его возврата NewData} возвращения данных; // Обычно просто использовать значение по умолчанию} частные: данные LARGE_DATA; }; недействительный бар () {Foo е; Const LARGE_DATA & данные = f.getData (); ... // Данные процесса (только для чтения)} так, чтобы избежать ненужных копий. Visual Studio не жалуется на это, но г ++ делает (и, вероятно, справедливо).
Baeroth
1

голосов
1

ответ
419

Просмотры

Define const object in a header file

У меня есть вопрос относительно константного ключевого слова в C ++. У меня есть следующий класс: Foot.h класс Foot {общественности: Foot (BOOL isRightFoot); константные Вектор internFootAxis; константные Вектор externFootAxis; BOOL isRightFoot; частное: Тело * тело; } Если вектор является классом реализации основных R ^ 3 векторных операций. internFootAxis обозначает вектор, который идет от центра стопы (представлен как объект Body - это класс, представляющий собой физический объект) на большом пальце ноги. externFootAxis обозначает вектор, который идет от центра стопы до мизинца. Я хочу начальное значение internFootAxis и externFootAxis, чтобы быть константной (потому что я применения операторов на каждой итерации в графическом дисплее основного цикла для тех векторов, которые изменяют внутреннее состояние вектора). К несчастью, значения internFootAxis (т = 0) и externFootAxis (т = 0) зависит, если я рассматриваю левую или правую ногу, поэтому мне нужно, чтобы объявить их значения внутри конструктора стопы, а не вне класса. Технически я хочу сделать следующее Foot.cpp Foot :: Foot (BOOL isRightFoot) {тело = новое тело (); если (isRightFoot) {internFootAxis (1,1,0); externFootAxis (1, -1,0); } Еще {internFootAxis (1, -1,0); externFootAxis (1,1,0); }} Есть ли простой способ сделать это? Большое спасибо за вашу помощь V. если (isRightFoot) {internFootAxis (1,1,0); externFootAxis (1, -1,0); } Еще {internFootAxis (1, -1,0); externFootAxis (1,1,0); }} Есть ли простой способ сделать это? Большое спасибо за вашу помощь V. если (isRightFoot) {internFootAxis (1,1,0); externFootAxis (1, -1,0); } Еще {internFootAxis (1, -1,0); externFootAxis (1,1,0); }} Есть ли простой способ сделать это? Большое спасибо за вашу помощь V.
Vincent
1

голосов
1

ответ
263

Просмотры

Конструктор копирования подписи без сопзЬ ключевое слово C ++

Почему компилятор выдаст ошибку в строке 1, даже если конструктор копирования не будет вызываться в строке 1 и ошибка исчезает, если конструктор копирования подпись объявлена ​​как константы? класс А {INT I; общественности: A (Int N): я (п) {соиЬ
Heisenberg
1

голосов
1

ответ
575

Просмотры

Emacs подсветка синтаксиса для C ++ с использованием «константный» ключевое слово

У меня возникли проблемы с подсветкой синтаксиса в Emacs при написании C ++ с использованием константного ключевым слова. ММВХ является следующий класс #include МойКласс {pulbic: пустота HelloWorld (); }; VOID MyClass :: HelloWorld () {станд :: соиЬ
nick
1

голосов
1

ответ
167

Просмотры

Initialize const parent struct member from derived struct

Я сочинительство иерархии структур, которые все вытекают из одной и той же базовой структуры. Указанная базовая структура имеет поле тега, который позволяет мне определить, что в нем. Теперь я хочу, чтобы автоматизировать процесс инициализации этой области, так что нет никаких ошибок, но не хотят писать инициализатор для каждой производной структуру. Что я делаю сейчас с использованием промежуточного прокси-структуру, чтобы инициализировать базу один. Heavilly обезжиренное версия моего заголовка файла будет: перечисление класса тега {Header, запись, Unknown = ~ 0}; Кусок структура {сопз тегов тегов; Кусок (Tag т = Tag :: Unknown): тег (т) {}}; Шаблон <Tag TAG> структура ChunkProxy: публичный Кусок {ChunkProxy (аннулируются): Кусок (TAG) {}}; структура HeaderChunk: общественное ChunkProxy <Tag :: Header> {INT независимо = 0; }; структура EntryChunk: общественное ChunkProxy <Tag :: Запись> {INT somedata = 0; }; Я не чувствую себя комфортно с этим куском прокси там, чувствует, что может быть лучшим способом достижения этой цели; и кусок не может быть сам по себе шаблон класса, потому что я не мог передавать его по указателю. Примечание: Я делаю это, чтобы помочь мне разобрать Chunked поток данных, отображение памяти для чтения из строки непосредственно в стручка структур. Изменить: В соответствии с ответом Арчи, я добавил конструктор для Chunk и удален const_cast из ChunkProxy конструктора. отображение память считывается из строки непосредственно в стручке структуры. Изменить: В соответствии с ответом Арчи, я добавил конструктор для Chunk и удален const_cast из ChunkProxy конструктора. отображение память считывается из строки непосредственно в стручке структуры. Изменить: В соответствии с ответом Арчи, я добавил конструктор для Chunk и удален const_cast из ChunkProxy конструктора.
Diego Sánchez
1

голосов
1

ответ
116

Просмотры

Как объявить указатель константной функции члена в то время как точка на константный адрес

Что я имею в виду что-то вроде Const символ * сопзЬ р; или символ * Const Const р ;. Р здесь стоять указатель указывает на константный полукокса, а сам указатель также Уст. Таким образом, * р = «а»; или символ с = «с»; р = & с; не будут выполнены. Пожалуйста, кто-нибудь сказать мне, как объявить указатель указывает на функцию-член, и то, что он указывает и сам Const, и без ЬурейеЕ. Не использовать на практике просто любопытно. Это не то, что я спрашиваю о.
Li Zhen
1

голосов
1

ответ
232

Просмотры

Dart: Инициализировать перечисление из JavaScript вар

В моем HTML файл у меня есть: Var ServerName = "dev.myapp.com:8080"; Тогда, в моем Dart код: импорт "дротиком: JS", как JS; Строка SERVER_NAME = js.context [ "имя_сервер"]; Строка SIGNIN_PLACE_URL = "HTTP: // $ SERVER_NAME / зарегистрировались"; Строка SIGNOUT_PLACE_URL = "HTTP: // $ SERVER_NAME / SignOut"; класс Место {статический Const SigninPlace = сопы Место ._ (SIGNIN_PLACE_FRAGMENT_URL); статический Const SignoutPlace = Const Место ._ (SIGNOUT_PLACE_FRAGMENT_URL); статические значения GET => [SigninPlace, SignoutPlace]; Окончательные строки fragmentURL; Const Место ._ (this.fragmentURL); } Я получаю ошибку в моем «перечисление» в отношении обоих моих аргументов fragmentURL для обоих значений: Аргументы постоянного создания должны быть константными выражениями Так это выглядит, как мне нужно, чтобы сделать эти fragmentURLs сопзЬ, но не знаю, как. Что решение здесь?
IAmYourFaja
1

голосов
3

ответ
584

Просмотры

equal_range и 2 Перегрузка не имеют юридическое преобразования для «этого» указателя

Вот этот простой класс код #include MyMap: общественный станд :: MultiMap {общественности: недействительным Foo (сопзЬ INT * бар) сопзЬ {equal_range (бар); }}; INT основных () {MyMap MyMap; INT номер; myMap.foo (& число); возвращать 0; } Это не компилируется, и дать следующее C2663 ошибки об ошибке: «зОго :: _ Tree :: equal_range»: 2 Перегрузки не имеет юридическое преобразования для «этого» указателя я видел много темы об этой ошибке, и кажется, что это является константным вопросом. Это компилируется нормально, если я перехожу Foo (сопзЬ INT * бар) в Foo (INT * бар). Проблема в том, я не вижу, как содержание Foo предполагается изменить что-либо к моему объекту MyMap. станд :: MultiMap предлагает константные версии equal_range: http://www.cplusplus.com/reference/map/multimap/equal_range/ Что такое моя проблема? Спасибо
OoDeLally
1

голосов
2

ответ
575

Просмотры

В какой переменном сегменте глобальной сопзИ будет сохранено и почему

после применения константного спецификатора к любому глобальным переменному увеличивает размер текстового сегмента. так, почему глобальная переменная сопзЬ будет храниться в текстовом сегменте. Я пробовал эти коды Const INT I = 5; INT основных () {возвращают 0; } Вывод команды: размер a.out текстовые данные BSS разл шестнадцатеричного файла 1080 496 16 1592 638 a.out INT I = 5; INT основных () {возвращают 0; } Вывод команды: размер a.out текстовые данные BSS разл шестнадцатеричного файла 1076 500 16 1592 638 a.out
Alok
1

голосов
1

ответ
642

Просмотры

Дополнительные параметры «должны быть во время компиляции константы» с константным еще пристанут

Я прочитал и Необязательные параметры «должны быть константа во время компиляции» и параметр по умолчанию для значения должно быть постоянная время компиляции? Но это продолжает не компиляции на декларации, маркировка Empty как не постоянная. общественного класса MyClass {частная Const строка Empty = string.Empty; частная строка WriteFailedList (строка Префикс = Empty, DeployResponse Ret) {StringBuilder С.Б. = новый StringBuilder (); вар errorItems = Ret.Items.TakeWhile (пункт => item.Status == DeployItem.ItemStatus.Error); Еогеасп (вар элемент в errorItems) sb.AppendLine (String.Format ( "{0} {1}", префикс, item.Filename)); вернуть sb.ToString (); }} @Edit: Код хорошие предложения практика, принятые от Jon тарелочек.
apacay
1

голосов
2

ответ
550

Просмотры

Как объявить сопзЬ в функции класса

Я новичок в PHP. У меня странный сценарий, в котором я не могу объявить следующий внутри функции: Const CONST_Example = 1/192; I'v пытались также: константный CONST_Example = 1; Не работает. Я хочу, чтобы иметь возможность сохранять постоянное число с плавающей точкой, которая является результатом арифметического выражения, такие как 1/190 и т.д.
JavaSa
1

голосов
2

ответ
644

Просмотры

C ++, не const_iterator не соответствующего конструктора

Я пытаюсь построить пользовательский const_iterator вложенного класса для моего массива на основе списка класса. вот класс класс const_iterator {частное: Const Т * р; общественности: const_iterator (Const Т * л) {р = л; } Const_iterator (const_iterator & ХИ) {р = Ci.P;} Const Т & оператор * () сопзЬ {возвращение * р;} оператор BOOL == (Const итератора & я) сопзЬ {если (* р == * я) возвращает истину; еще вернуться ложным; } BOOL оператор = (const_iterator и я) сопзЬ {если (* р = * я!) Возвращает истину!; еще вернуться ложным; } Const_iterator & оператор = (const_iterator & я) сопзЬ {р = ф; это вернуть; } Const_iterator & оператор ++ () сопзЬ {возвращение const_iterator (р + 1); } Const_iterator & Оператор - () сопзЬ {возвращение const_iterator (р-1); } Const_iterator оператор ++ (целое) сопзЬ {р = р + 1; вернуть const_iterator (р-1); }; const_iterator оператор - (целое) сопзЬ {р = п-1; вернуть const_iterator (р + 1); }}; Тем не менее, когда я вернусь в свой класс, чтобы сделать начала, конца и т.д., как показано здесь: Итератор начинается () {возвращение итератора (и данные [0]); } Const_iterator начинают () сопзЬ {возвращение const_iterator (& данные [0]); } Итератора конец () {возвращение итератора (& данные [место + 1]);} const_iterator конец () сопзЬ {возвращение const_iterator (& данные [место + 1]);} const_iterator cbegin () сопзЬ {возвращение const_iterator (& данные [0]) ; } Const_iterator cend () сопзЬ {возвращение const_iterator (& данные [место + 1]);} Я получаю сообщение об ошибке: «не соответствующий конструктор для инициализации«ArrayList ::
Nurder
1

голосов
2

ответ
1.1k

Просмотры

Где константный струнный магазин? в стеке или .data? [Дубликат]

Этот вопрос уже есть ответ здесь: Как строковые литералы собраны в C? 2 ответов «время жизни» строки в буквальном С 9 ответов я написал простой код на С, который показывает ниже. В этом фрагменте кода я хочу, чтобы проверить, где Конст строки ABCD магазинов. Я первый догадаться, что она должна храниться в секции .data только для чтения. После испытания в Debian, однако, все это отличается от того, что я начальной догадывался. Путем проверки кода сборки, который генерируется с помощью GCC, я считаю, он будет помещен в кадре стека функции р. Но когда я пытаюсь его позже в OSX, строка снова хранится в секции .data. Теперь я смущен этим. Есть ли стандарт для хранения сопзЬ строки? #include символ * р () {символ р [] = "ABCD"; вернуться р; } INT основных () {символ * р = р (); Е ( "% s \ п", рр); возвращать 0; } UPDATE: ответ RICI в пробуждают меня. В OSX, начальная буквальным хранится в .data, а затем перемещается в кадре стека функционировать позже. Таким образом, она становится локальной переменной для этой функции. Тем не менее, куб.см, Debian справиться с этой ситуацией отличается от OSX. В Debian, GCC непосредственно хранится буквальным в стеке, а не перемещать его из .data. Я прошу прощения за мою невнимательность.
Douglas Su
1

голосов
1

ответ
247

Просмотры

перечисление или ЬурейеЕ перечисление для возвращаемых значений [закрытыми]

У меня есть функция, которая проверяет несколько различных состояний системы. Я мог бы использовать либо перечисление {предел = -2, -1 = таймаут, текущая = 0, законченный = 1}; Функция затем будет определена как: статическое испытание INT (пустот); Я лично предпочитаю ЬурейеЕ перечислимую подход: ЬурейеЕ перечисление {предел = -2, -1 = таймаут, текущая = 0, законченный = 1} ETest; Тогда функция будет определена как: статическое испытание ETest (пустот); Что Вы бы лучше из этих двух? Или есть лучший способ сделать это, что я не подумал?
Ramon Hofer
1

голосов
2

ответ
633

Просмотры

Const Обработчик = функция (событие) = SCRIPT1002: Ошибка синтаксиса (IE10)

Мы будоражим нашу IND над синтаксической ошибкой, что затрудняет счетный скрипт в IE10 и ниже. Он традиционно отлично работает в любом другом браузере. Ошибка говорит: SCRIPT1002: ошибка синтаксиса (строка 11, символ 12) Const Обработчик = функция (событие) {Каждый имеет представление о том, где все становится не так, пожалуйста?
cptstarling
1

голосов
1

ответ
160

Просмотры

константная ссылка строки в качестве аргумента шаблона не типа

Я пытаюсь иметь константную ссылку строку в качестве аргумента шаблона не типа, я не смог пройти эту ошибку компиляции. test.h: #include #include шаблонный класс TestTmplt {}; Const станд :: строка & TEST_REF = "TESTREF"; TestTmplt TestRefData определение типа во; test.cpp: #include шаблонного класса TestTmplt; Ошибка компиляции: ./test.h:10:34: ошибка: не удалось преобразовать аргумент шаблона âTEST_REFâ в Àconst строку & {ака Const зЬй :: basic_string &} â ./test.h:10:49: Ошибка: недопустимый тип в декларации перед â, токен я компиляции на CentOS Linux, используя следующие команды GCC г ++ -c -MMD -mf test.u -g -D_LINUX -std = C ++ 03 -pthread -Wall -DVALGRIND -Wno-Missing-полевые инициализаторы -z muldefs -I. -о test.o test.cpp
N3Xg3N
1

голосов
1

ответ
140

Просмотры

Const декларация любопытства

Хорошо, таким образом я делаю некоторые упражнения из книги, и я увидел это объявление поплавок е, с = Const 9,9; Сначала я подумал, что это ошибка компилятора, но я пошел в VS2013 и проверил это, и он не выдаст ошибку. Я мог бы даже изменить переменный с после объявления. Я хотел бы знать, почему и как это возможно, что компилятор даже делать с константным ключевым словом в этом случае?
Ryncops
1

голосов
2

ответ
192

Просмотры

Constructor and const reference

I; м изучение C ++ прямо сейчас (начало как 2 дня назад) и у меня есть некоторые проблемы с написанием Copy C'tor Узла. Узел представляет собой класс следующим образом: Шаблон класса Node {T * данные; Узел * следующий; друг класс итератора; общественности: Узел (): данные (NULL), следующий (NULL) {} Узел (сопзЬ Т & данные): данные (NULL), следующий (NULL) {Т * копия = новый Т (данные); this-> данные = копировать; } Узел (Const узел и узел): данные (NULL), следующий (NULL) {Узел фиктивная; dummy.data = node.data; dummy.next = node.next; Узел головки * = новый узел (* фиктивная); * Это * = голова; в то время как (dummy.next! = NULL) {манекена = * (dummy.next); голова = head-> следующая; голова = новый узел (* фиктивная); } } Заметка: У меня оператор * так * фиктивные результаты в типе T. Другое Примечание: Мои государственные и частные поля могут быть неправильно - но я буду иметь дело с этим позже. После того, как вы стошнило немного, давайте посмотрим на Copy C'tor пожалуйста. Он получает константный Refernce из узла, а затем я попытался создать указатель на него. Компилятор выводит ошибку: Node * манекен = & узел; Результаты недопустимое преобразование из «сопзЬ Node *» в «Node *» (у меня короткий основной пытается создать узел). Хорошо, так что кажется, что я не могу создать указатель на константный, поэтому я попытался скопировать это поля Мануалов, как показано в коде. При запуске Eclipse, отладчик и проверить, если он работает - это делает. Тем не менее, когда я продолжаю делать шаги, D'тор называется на голове (в конце конструктора копирования), и в результате все разваливается. Так что я понятия не имею, что делать дальше, или даже если я нахожусь в правильном направлении. Как я должен сделать конструктор копирования? Я думаю, что я понимаю, почему D'тор называется (я создал что-то и в конце блока, что-то разрушается - справа), но я не знаю, как сделать это правильно.
SiuusSE
1

голосов
2

ответ
449

Просмотры

Как поставить переменные сопзЬ символ * массив и сделать размер переменной

У меня есть этот массив, который является правильным, но мне нужно значения и размер, чтобы быть переменными. Это возможно? Если да, то как? Const символ * метка [] = { "Группа А", "Группа B", "Группа C", "Группа D", "Группа E", "Группа F", "G группы", "Группа H"}; Он должен быть константным символ * массив, так как он используется в качестве параметра StringArray, который не будет принимать что-либо менее сложный. Любая помощь будет оценена. Пожалуйста, имейте в виду, что я являюсь разработчиком студент.
Nerd Mom
1

голосов
1

ответ
127

Просмотры

Сырое указатель неявно преобразуется в константный указатель, нужно то же самое с типом пользователя

Если у меня есть шаблон функции принимающую указатель на тип шаблона: шаблон недействительным Foo (сопзЬ T * х); он, естественно, принимает указатель на неконстантный объект: междунар * х = ...; Foo (х); // INT * неявно преобразуется в сопзЬ Int * Я хотел бы сделать то же самое с классом шаблона, который имеет указатель семантику. Например, недавно предложенный класс array_view, который представляет собой вид на непрерывный блоке памяти, имеет (не владеющий) указатель семантику и может быть использован для обозначения массива изменяемых или константных элементов: array_view ау = ...; пр [0] = 1; array_view кавалерия = ...; CAV [0] = 1; //
tamas.kenez
1

голосов
1

ответ
100

Просмотры

Статические члены класса и переключатели

У меня небольшая проблема, я получаю сообщение об ошибке: «C2361: инициализация * идентификатор * пропускается по метке„по умолчанию“» Я использую элемент внутреннего класса, чтобы установить выбранный подход, используемый в моих методах. Эти методы используют этот внутренний элемент (статический Int) с переключателем, чтобы определить, какой подход был установлен. Коммутатор нуждается в intial значение при компиляции, так что я решил использовать статический константный Int. Однако, VS все еще недоволен, и я не могу изменить статический константный Int, а также. Я уверен, что это не имеет большого значения, но это довольно сложно. Пример: класс тест {общественности: статические INT Val; статическая сила SETVAL (INT вал); статические INT DoStuff (недействительными); }; тест :: SETVAL (интермедиат вал) {Val = значение; } Тест :: DoStuff () {переключатель (Val) {случай 1: // делать вещи случай 2: // делать другие вещи по умолчанию:
Y.S
1

голосов
1

ответ
416

Просмотры

Опасные результаты указателя отлиты в потере сопза квалификации

Согласно C стандарт ISO (6.3.16.1), указатель может быть назначен только на другой указатель, если «оба операнда являются указателями на квалифицированные или неквалифицированные версии совместимых типов, а также тип, на который указует левые все классификатор тип, на который указывает вправо». Я получил это предупреждение в моем статическом анализе инструмент, но я не уверен, если есть реальная проблема или нет. Потому что, как вы можете видеть на приведенном ниже коде, что указатель будет передан в функцию, которая имеет «константный» спецификатор в это прототип междунар основной () {статического летучий Const подписал Int Бату [5] = {1,2,3,4, 5}; беззнаковое целочисленное значение х = 5; FUNC (х, (подпись INT *) Бат); } Подписан Int FUNC (неподписанных Int p1, летучий Const подписал Int * p2) {возвращают 0; }
batgun
1

голосов
1

ответ
51

Просмотры

Реализация константных методов интерфейса и файлы чтение

У меня есть интерфейс, который имеет кучу константных методов. В одной из реализации интерфейса мне нужно прочитать запрошенную информацию из файла. Как было указано, например, здесь это на самом деле НЕ константная операция, так как файл обработки изменений с чтением. Есть три основных варианта, чтобы идти об этом я отдаю себе отчет: 1) Использовать временный дескриптор файла при каждом запросе. 2) Использование Pimpl. 3) Используйте изменяемые на дескриптор файла. Первый вариант, очевидно, является излишним, и с большим количеством запросов, добавляет много накладных расходов. Второй вариант добавляет окольный, но, кажется, довольно стандартное решение. Третий вариант, однако не имеет накладных расходов и не окольные, но это в основном бланш для изменений. Потом снова, хотя Pimpl идиома делает то же самое в только более запутанной, но, возможно, более контролируемым образом.
Resurrection
1

голосов
1

ответ
31

Просмотры

Проблема с прохождением константный эталонного объекта в качестве параметра, «слева от» Отчеты отладчик VS .getXCoord «должен иметь звонки / структуры / объединения»

В моем файле заголовка, я определил класс Point, конструирует (х, у) координаты точки, содержит несколько геттер и сеттер функций-членов, а также содержит функцию-член toDistance, которая возвращает расстояние между двумя точками. класс Point {частный: двойная x_coord; двойная y_coord; общественности: Point (двойной х, дважды у); Point (); setXCoord недействительного (двойной); setYCoord недействительного (двойной); двойная getXCoord (); двойная getYCoord (); двойной toDistance (Const точка *); }; Вот функции-члены (интересов) в файле реализации: двойной точка :: getXCoord () {возвращение x_coord; } Двойная точка :: getYCoord () {возвращение y_coord; } Двойная точка :: toDistance (Const точка * Р2) {двойной p1_x = getXCoord (); двойная p1_y = getYCoord (); двойная p2_x = P2.getXCoord (); двойная p2_y = P2.getYCoord (); двойная x_distance = p2_x - p1_x; двойная y_distance = p2_y - p1_y; двойное расстояние = SQRT (POW (x_distance, 2) + пау (y_distance, 2)); вернуться расстояние; } При работе с тестовыми данными, VS возвращает ошибку слева от «.getXCoord» должен иметь звонки / структуры / объединения»для линий двойной p2_x = P2.getXCoord (); и дважды p2_y = P2.getYCoord (); Что я делаю неправильно здесь?
ehh123
1

голосов
1

ответ
142

Просмотры

Return by const reference in c++ where the receiver function copy the value is it worth it?

i have this situation which i wander if returning by const reference dose relay save something , this function may be called hundreds of times . i have : General Container that returns int as const reference struct Val { public: Val(int& v) { iVal = v; } const int& toInt() { return iVal; } private: int iVal; }; function that getting the number: Val Mo::doSomthing() { Val v(444444); return v; } calling the doSomthing().toInt(): int x = 0; class Foo { ... .... Mo mo; void Foo::setInt(float scaleX) { x = mo.doSomthing().toInt(); //x is class member which other functions are using it } ... ... .. } In this case is there any reason to for using const reference to save some bits?
user63898
1

голосов
1

ответ
198

Просмотры

C ++ Неизменное проходят пользовательский класс по ссылке или значению

Я сделал пользовательский класс, который включает в себя тонны числа и строки вычислений. Я сделал свой класс непреложного лишь при условии аксессоров и нет мутаторов. После того, как объект построен, не меняя одно свойство этого. Мой вопрос отсюда, в настоящее время все мои функции являются передача по значению. Если у вас есть неизменяемый объект, является передача по ссылке даже нужно больше? Является ли постоянно быть создан проход по значению расточительной с точки зрения памяти, так как копии нужно? Например: класс MyInteger {частного: Const Int Вал; общественности: MyInteger (сопзЬ Int А): Вэл (а) {}; ИНТ ПолучитьЗначение () сопзИте {вернуть Вал; } MyInteger добавить (Const MyInteger другой) {вернуть MyInteger (вал + other.getValue ()); }}
Hatefiend
1

голосов
1

ответ
227

Просмотры

GCC allows 1-line declaring of multiple pointers, but not non-pointers, with different const qualifiers

Учитывая ниже программы, GCC (г ++, но я полагаю, в Нестандартный :: биты применяются к С тоже), как можно видеть на IDEone.com, ведет себя следующим образом: Это позволяет объявить несколько указателей в одной строке, каждый со своим самостоятельно, возможно, отличается сопз квалификации, которая почитается. Это не позволяет одинаковым для нескольких не-указателей. Вместо этого, Const или его первого переменное отсутствие используется для всех переменных, объявленных в этой строке. Любые дополнительные константные ключевые слова производят синтаксическую ошибку. Мои вопросы таким образом: Является ли это ожидалось, правильное поведение в обоих указателей и не стрелочных случаев? Почему, с точки зрения стандартизированной грамматики, делает это различие существует? Я искал, но не везло. У меня есть n3797.pdf открыть передо мной, но я просто не кажусь на требуемом уровне, чтобы понять его спецификацию грамматики еще. : для петли сделать это заманчиво, как способ получить константный конечный итератор - что кажется возможным, если указанная итератора является указателем, но если это класс. Во всяком случае, я не прошу для просмотра кода. Тема почему эта разница существует, независимо от того, как это целесообразно эксплуатировать его. # include # include Int основных () {Int I {42}; INT * p1 = & я, * Const p2 = & я; // OK станд :: соиЬ :: значение для петли сделать это заманчиво, как способ получить константный конечный итератор - что кажется возможным, если указанная итератора является указателем, но если это класс. Во всяком случае, я не прошу для просмотра кода. Тема почему эта разница существует, независимо от того, как это целесообразно эксплуатировать его. # include # include Int основных () {Int I {42}; INT * p1 = & я, * Const p2 = & я; // OK станд :: соиЬ :: значение
underscore_d
1

голосов
2

ответ
380

Просмотры

Как объявить статическую Const структуры элементов внутри класса

Внутри класса, я хочу объявить структуру с некоторыми переменными. Переменные все Уста. Соответствующий код выглядит следующим образом: класс {структура данные Struct Глобал {// некоторые другие типы данных статического сопзЬ INT MAX_MOTORS = 8; } статическая константная GLOBALS; общественности: станд :: строка s [GLOBALS.MAX_MOTORS]; } Роль этой структуры сохранить некоторые переменные класса, организованные и сделать их доступными всему классу. Но я до сих пор не получить постоянное значение, как I'am сталкивается со следующей ошибкой: Ошибка: массив связан не целая константа, прежде «]» маркер станд :: строка s [GLOBALS.MAX_MOTORS]; Нет C ++ 11 доступны в настоящее время. Есть идеи?
caffeine

Просмотр дополнительных вопросов