Black Cat Опубликовано 28 июня, 2010 Жалоба Share Опубликовано 28 июня, 2010 Как менять значение указателей (самих указателей, а не структуры)? Всмысле присвоить указателю заранее известный адрес или перетащить структуру на любой другой адрес? Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Daniel5555 Опубликовано 28 июня, 2010 Жалоба Share Опубликовано 28 июня, 2010 Areldar Присвоить указателю заранее известный адрес. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Black Cat Опубликовано 28 июня, 2010 Жалоба Share Опубликовано 28 июня, 2010 На NULL он ругается в момент присвоения? Просто это ж стандартная фича вообще для любых указателей, единственное, что приходит в голову это какой-то фишки вектора, но я с ними практически не работал, мне в основном вообще динамические массивы приходилось делать :) Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
VECTOR Опубликовано 28 июня, 2010 Жалоба Share Опубликовано 28 июня, 2010 Это потому что у тебя массив из 26 векторов Соответственно тут: d->pointers = NULL; получается что ты хочешь присвоить NULL переменной типа vector<dictionary*>. Т.е. "объект = int", на это компилятор и ругается. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Daniel5555 Опубликовано 28 июня, 2010 Жалоба Share Опубликовано 28 июня, 2010 Areldar На NULL он ругается в момент присвоения?Просто это ж стандартная фича вообще для любых указателей, единственное, что приходит в голову это какой-то фишки вектора, но я с ними практически не работал, мне в основном вообще динамические массивы приходилось делать :) В момент присвоения. Сама ошибка такая: no match for 'operator=' in 'd->dictionary::pointers = 0' Я на 100% уверен, что это просто синтаксическая ошибка. Местами при работе с указателями несколько сложный синтакс. В данный момент он воспринимает то, что справа от стрелки как сам объект (то есть как будто это *d). Мне надо что он воспринял это указатель (то есть как просто d, если d указатель). VECTOR У меня массив из указателей на объект dictionary. Я не знаю как присвоить значение NULL указателю в массиве, сейчас он пытается присвоить это самому объекту dictionary. Господи, ну почему нигде нет нормального мануала по указателям, где нормально описаны все возможные случаи применения? Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Black Cat Опубликовано 28 июня, 2010 Жалоба Share Опубликовано 28 июня, 2010 А если создать просто vector <dictionary*> pointers[26]; pointers[i] = NULL; то все работает? Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Daniel5555 Опубликовано 28 июня, 2010 Жалоба Share Опубликовано 28 июня, 2010 Areldar Нет, не работает. Такая же ерунда. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Ashley Опубликовано 29 июня, 2010 Жалоба Share Опубликовано 29 июня, 2010 vector это vector из STL? Так ведь вот это - правда, разве нет?) : Это потому что у тебя массив из 26 векторов Соответственно тут: d->pointers = NULL; получается что ты хочешь присвоить NULL переменной типа vector<dictionary*> . Т.е. "объект = int", на это компилятор и ругается. vector <dictionary*> pointers[26]; Ты хочешь задать параметр n для создающегося объекта, но квадратные скобочки же не передают параметров создания, они для другого, они создают n экземпляров.) Поэтому vector<dictionary*> pointers[26]; явно понимается вроде my_vector_of_pointers_type pointers[26];, а чтобы создать вектор с n компонентами можно например просто вызвать нужный конструктор: vector<dictionary*> pointers(n, NULL); Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
VECTOR Опубликовано 29 июня, 2010 Жалоба Share Опубликовано 29 июня, 2010 VECTORУ меня массив из указателей на объект dictionary. Я не знаю как присвоить значение NULL указателю в массиве, сейчас он пытается присвоить это самому объекту dictionary. Может в голове у тебя и это, но написано в коде другое) Надо либо вообще не писать [26], либо как предлагает Ashley использовать конструктор. И, кстати, а нужен ли тебе там вектор вообще? Для массива фиксированного размера будет наверняка лучше: dictionary* pointers[26]; Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Daniel5555 Опубликовано 29 июня, 2010 Жалоба Share Опубликовано 29 июня, 2010 Ashley VECTOR Спасибо. Поменял на dictionary* pointers[26]; BTW, если написать #include <iostream> #include <string> #include <vector> using namespace std; struct dictionary { bool final; vector<dictionary*> pointers(26); }; , то выдается ошибка expected `;' before '(' token Не знаю в чем причина. Но так как оно сейчас, оно уже работает, в принципе. Цитата Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.