Пятница, 19 Апреля 2024, 20:56

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
05142Дата: Суббота, 22 Октября 2011, 17:59 | Сообщение # 21
постоянный участник
Сейчас нет на сайте
есть char* c;
нужно прочитать весь файл в эту строку стандартными средствами.

тоесть
Code

size_t L = /*как получить длинну файла*/

char* c = new char[L];

/*лучший способ прочитать файл тут*/


mecinvader
0x90Дата: Суббота, 22 Октября 2011, 18:35 | Сообщение # 22
участник
Сейчас нет на сайте
Code

FILE *fp = fopen("input.txt","r");
fseek(fp,0,SEEK_END);
size_t L = ftell(fp);
fseek(fp,0,SEEK_SET);
char* c = new char[L];
for(int i = 0; i<L; i++)
{
         c[i] = fgetc(fp);
}

Добавлено (22.10.2011, 18:35)
---------------------------------------------
SWFcreator, все в твоем коде правильно. VS 2010 компилит это без проблем. Покажи весь код который ты пытаешься скомпилировать и лог ошибки.

РесторДата: Суббота, 22 Октября 2011, 19:02 | Сообщение # 23
был не раз
Сейчас нет на сайте
Quote (SWFcreator)
Увидел в учебнике функции и переменные, объявленные типом перечисления. Почему-то мой компилятор(VS 2010) не хочет такое компилить. В интернете тоже читал про такие объявления. Я что то не так делаю, или из языка убрали?

Должно норм работать (у меня тоже VS 2010). Приведи пример кода полностью который компилируешь.
SWFcreatorДата: Суббота, 22 Октября 2011, 21:46 | Сообщение # 24
участник
Сейчас нет на сайте
Извиняюсь, только что скопировал этот же код (в моем сообщ.) и удачно скомпилил на другом компе. Не понимаю, в чем проблема. Дома писал то же, но с другими именами перечислений и переменных(без ошибок) - красным черкало, не указан тип переменной. А код примера я не пробовал, просто проверял прочитанное самостоятельно.

Сообщение отредактировал SWFcreator - Суббота, 22 Октября 2011, 21:51
IIIypukДата: Вторник, 25 Октября 2011, 22:07 | Сообщение # 25
-- ArchLinux Fan --
Сейчас нет на сайте
Не могу понять вопрос из учебника Регнигана, Ритчи.
Задание: "Напишите программу для вывода значения константы EOF"
Я кое-что напилил, но не уверен относился это к заданию или нет...
(показать не могу, сорцы на другом HDD, а SATA кабелей не хватает, либо привод, либо HDD)

P.S. Издание второе, страница 31...Упражнение 1.7


Одинокий юзер
0x90Дата: Вторник, 25 Октября 2011, 23:44 | Сообщение # 26
участник
Сейчас нет на сайте
Code

printf("%d",EOF);

Чего там мудрить?
IIIypukДата: Среда, 26 Октября 2011, 08:07 | Сообщение # 27
-- ArchLinux Fan --
Сейчас нет на сайте
0x90, тогда я сделал все правильно.
Просто усомнился что задание такое простое.

Добавлено (26.10.2011, 08:07)
---------------------------------------------
0x90, тогда я сделал все правильно.
Просто усомнился что задание такое простое.


Одинокий юзер
knight_of_honorДата: Среда, 26 Октября 2011, 13:06 | Сообщение # 28
Darrell Lance Abbott (Dimebag Darrell)
Сейчас нет на сайте
Нужна помощь.
Впервые попытался собрать dll.Делаю на Dev c++.
Собрал,но вот функции не могу вызвать,так как линкер орет,что,мол,я дурак и не умею нормально линковать.
Quote (Линкер,чтоб его.)
[Linker error] undefined reference to `Work()'

Прописываю в параметрах линковщика -mydll
Включаю хедер,уже не знаю,что сотворить.
mydll.cpp

mydll.h


Сообщение отредактировал knight_of_honor - Среда, 26 Октября 2011, 13:11
0x90Дата: Среда, 26 Октября 2011, 18:37 | Сообщение # 29
участник
Сейчас нет на сайте
Хмм, с dll все нормально. Ошибка в том проекте, куда вы ее подключаете. Убедитесь, что вы подключаете к нему mydll.dll.a
BOOMДата: Понедельник, 31 Октября 2011, 08:22 | Сообщение # 30
I am the creator of ADE
Сейчас нет на сайте
knight_of_honor, а ты либу линков подключал? (что-то_тама.a, либо что-то_тама.lib).
Подключи, и жизнь будет проще smile



______________________________
Я вернулся, и это чудо.
______________________________


Сообщение отредактировал BOOM - Понедельник, 31 Октября 2011, 08:23
MatouДата: Понедельник, 31 Октября 2011, 16:10 | Сообщение # 31
Исходный коТ
Сейчас нет на сайте
В С++ как нибудь определенно стандартом что должна возвратить функция main и как она должна это сделать?

как было бы правильнее?
Code

void main(int argc, char** argv)
{
}


Code

void main(int argc, char** argv)
{
     return;
}


Code

int main(int argc, char** argv)
{
     return 0;
}


или как то еще? И зависит ли это от операционной системы и реализации компилятора?



noTformaTДата: Понедельник, 31 Октября 2011, 16:14 | Сообщение # 32
Ukrainian independent game developer
Сейчас нет на сайте
Matou, Все зависит от стандарта и ос. Например:
Other platform-dependent formats are also allowed by the C and C++ standards, except that in C++ the return type must stay int; for example, Unix (though not POSIX.1) and Microsoft Windows have a third argument giving the program's environment, otherwise accessible through getenv in stdlib.h:

The value returned from the main function becomes the exit status of the process, though the C standard only ascribes specific meaning to two values: EXIT_SUCCESS (traditionally zero) and EXIT_FAILURE. The meaning of other possible return values is implementation-defined. In case a return value is not defined by the programmer, an implicit return 0; at the end of the main() function is inserted by the compiler; this behavior is required by the C++ standard.


@noTformaT
BOOMДата: Вторник, 01 Ноября 2011, 07:15 | Сообщение # 33
I am the creator of ADE
Сейчас нет на сайте
Возврат в main, или критический останов (функция exit) довольно полезные возможности, которыми я пользуюсь.
Например, необходимо во внешне запустить свою программу, которая, например, создаёт некую папку и кучу файлов wacko , необходимых для работы программы. В инстоляторе прописываем запуск программы - генератора необходимого (в зависимости от ос, например) и ждём выполнения этой программы.
В инстолятор может вернуться два значения: 0x00 и 0xFF, где 0x00 - операция завершена нормально, а 0xFF - данные небыли созданы/собраны. И, по факту возращённого ключа, применяются меры.

Matou, по возврату, если тебе интересно, вначале необходимо объявить необходимые макросы данных, причём, желательно это сделать во внешнем файле-заголовке. И return присваивать необходимые значения по макросу.

test.h
Code

***
#define MYPROCESS_NORMALEXIT    0x00
#define MYPROCESS_BADEXIT       0xFF
***


test.cpp
Code

int main(int argc, char* argv[])
{
***
if(bad) return MYPROCESS_BADEXIT;
***
return MYPROCESS_NORMALEXIT;
}
***


А все функции запуска процесса возвращают статус процесса. Вот этот статус и есть число, которое возвращаешь в функции main.

P.S.
А тип возврата зависит от стиля программирования программиста.


______________________________
Я вернулся, и это чудо.
______________________________


Сообщение отредактировал BOOM - Вторник, 01 Ноября 2011, 07:15
SWFcreatorДата: Вторник, 15 Ноября 2011, 21:49 | Сообщение # 34
участник
Сейчас нет на сайте
Всем привет.
Как добиться того, чтобы в такой ситуации вызывался мой конструктор для каждой из пяти переменных массива var?
Code

class a
{
public:
a();
...
};

class b
{
public:
void func();
a *var;
}
void b::func()
{
var = (a*) malloc(5 * sizeof(a));
}


Сообщение отредактировал SWFcreator - Вторник, 15 Ноября 2011, 21:51
0x90Дата: Вторник, 15 Ноября 2011, 22:08 | Сообщение # 35
участник
Сейчас нет на сайте
SWFcreator, вместо
Code

var = (a*) malloc(5 * sizeof(a));

пиши
Code

var = new a[5];

и тогда для всех 5 экземпляров будет вызван твой конструктор, но имей ввиду, что такое прокатит только с конструктором без параметров. Поэтому при создании класса всегда следует предусматривать конструктор без параметров, который будет инициализировать значениями по умолчанию необходимые данные.
SWFcreatorДата: Вторник, 15 Ноября 2011, 22:14 | Сообщение # 36
участник
Сейчас нет на сайте
Спасибо, но new категорически не подходит. Для var еще не раз будет вызываться realloc(), а я слышал, она не работает с памятью, выделенной new, да и с ним встает точно та же проблема.
0x90Дата: Вторник, 15 Ноября 2011, 22:46 | Сообщение # 37
участник
Сейчас нет на сайте
Тогда никак. malloc-оператор языка С, а в С никаких классов(а значит и конструкторов) нет. Сожалею biggrin

Добавлено (15.11.2011, 22:46)
---------------------------------------------
Quote (SWFcreator)
Для var еще не раз будет вызываться realloc()

Знаете, честно говоря это маразм. Размер класса не меняется динамически, для указателей на классы нет необходимости вызывать realloc


Сообщение отредактировал 0x90 - Вторник, 15 Ноября 2011, 22:56
DemeronДата: Вторник, 15 Ноября 2011, 22:56 | Сообщение # 38
User created in C++
Сейчас нет на сайте
ха... все очень просто))

Code

...
char* txt=0;

int main()
{
txt=(char*)realloc(txt,sizeof(char)*100);//выделяем память в 100 символов
txt=(char*)realloc(txt,sizeof(char)*1000);//изменяем эту память на 1000 символов, прошлые 100 остаються

return 0;
}


что бы не использовать malloc а все время для простоты кода пользоваться realloc - начальное значение указателя должно быть 0 (NULL)
0x90Дата: Вторник, 15 Ноября 2011, 22:57 | Сообщение # 39
участник
Сейчас нет на сайте
Demeron, ты бы хоть его вопрос прочитал, а то совсем не в тему получилось.
SWFcreatorДата: Вторник, 15 Ноября 2011, 22:59 | Сообщение # 40
участник
Сейчас нет на сайте
консольный мини текстовый редактор, где неизвестно сколько будет вводиться текста. Я вижу 2 варианта: запастись местом сразу или выделять постепенно по мере надобности. Стремно конечно звучит - выделять память под каждый символ при вводе. Без классов работает, попробовал с ними, я ж учусь.

Сообщение отредактировал SWFcreator - Вторник, 15 Ноября 2011, 23:03
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг