Понедельник, 05 Декабря 2022, 18:39

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

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

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
OpenGOOДата: Понедельник, 04 Августа 2014, 18:17 | Сообщение # 1361
почти ветеран
Сейчас нет на сайте
Saitei, может из за этого
Цитата
The loadFromFile function sometimes fails with no obvious reason.


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
SaiteiДата: Понедельник, 04 Августа 2014, 18:23 | Сообщение # 1362
старожил
Сейчас нет на сайте
Цитата OpenGOO ()
fails with no obvious reason.

Как это так?! О_о

Добавлено (04.08.2014, 18:23)
---------------------------------------------
Заметил, что в релизе оно пашет. Хм. Дело в библах

goldsphereДата: Вторник, 02 Сентября 2014, 15:30 | Сообщение # 1363
заслуженный участник
Сейчас нет на сайте
Я собираюсь в своём проекте в VS использовать классы Image и Object, при создании мне пишут, что они зарезервированы, не будет ли проблем, если я заключу их в namespace?

FinderX - Android Аркада
morgloddddДата: Вторник, 02 Сентября 2014, 16:44 | Сообщение # 1364
участник
Сейчас нет на сайте
Цитата goldsphere ()
в VS использовать классы Image и Object

В C++ нет таких зарезервированных слов, не слушай того, кто тебе такое пишет - он лжет xDDD
goldsphereДата: Среда, 03 Сентября 2014, 05:27 | Сообщение # 1365
заслуженный участник
Сейчас нет на сайте
morglodddd, не слов, а классы, возможно для нужд студии или чего-то ещё...

FinderX - Android Аркада
morgloddddДата: Среда, 03 Сентября 2014, 06:16 | Сообщение # 1366
участник
Сейчас нет на сайте
goldsphere, а классы вообще не резервируются happy
-l33t-h4xx-Дата: Среда, 03 Сентября 2014, 11:17 | Сообщение # 1367
участник
Сейчас нет на сайте
Цитата morglodddd ()
goldsphere, а классы вообще не резервируются

Потом, когда его программа не компилируется или работает непонятным образом, человек перестаёт так думать.

Вообще, неймспейсы исключают случайные конфликты имён, так что должно сработать.


Как правильно задавать вопросы

Сообщение отредактировал -l33t-h4xx- - Среда, 03 Сентября 2014, 11:43
AlkoshaДата: Вторник, 07 Октября 2014, 10:15 | Сообщение # 1368
участник
Сейчас нет на сайте
Реально ли (если реально, то как) сделать функцию так, чтоб ей можно было передавать три аргумента, а так же можно было бы и два аргумента передавать, не указывая третий (при этом третий аргумент принимал бы дэфолтное значение, указанное внутри функции) ?

То есть
чтобы можно было бы одну и ту же функцию и так вызывать: func(X,Y,Z);
и вот так: func(X,Y); [чтоб компилятор не ругался на некорректное количество аргументов]
goldsphereДата: Вторник, 07 Октября 2014, 10:37 | Сообщение # 1369
заслуженный участник
Сейчас нет на сайте
void func(int x = 0, int y = 0, int z = 0){}
Только если ты хочешь пропустить допустим y, то придётся писать так func(x, 0, z);


FinderX - Android Аркада
AlkoshaДата: Понедельник, 13 Октября 2014, 09:02 | Сообщение # 1370
участник
Сейчас нет на сайте
А вот ещё один нубский вопрос.
Есть два разных класса, и каждому из них необходимо получать результаты переменных друг друга.

То есть
class MyClass1
{
int a=228;
int b;

b=B.b;
}
MyClass1 A;

class MyClass2
{
int a;
int b=1488;

a= A.a;
}
MyClass2 B;

В данном случае если класс А будет объявлен раньше, компилятор выдаст сообщение об ошибке, что не объявлен клас B в строчке присвоения переменной.
И наоборот.


Сообщение отредактировал Alkosha - Понедельник, 13 Октября 2014, 09:02
goldsphereДата: Понедельник, 13 Октября 2014, 10:11 | Сообщение # 1371
заслуженный участник
Сейчас нет на сайте
Что вообще за бред написан выше?
Во-первых, переменным внутри класса присваивается значение в конструкторе. Во-вторых,обмен данными может быть только между экземплярами классов. Я, если честно, не очень понял, что должно получиться в итоге. Поподробнее о задаче, пожалуйста.


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Понедельник, 13 Октября 2014, 10:12
SEvgДата: Понедельник, 13 Октября 2014, 12:01 | Сообщение # 1372
Алхимик
Сейчас нет на сайте
Цитата Alkosha ()
class MyClass1
{
int a=228;
int b;

b=B.b;
}
MyClass1 A;

class MyClass2
{
int a;
int b=1488;

a= A.a;
}
MyClass2 B;

Alkosha, если компилятор это проглатывает, то я хочу тоже такой, чтобы он сам понимал, что я хочу, не зависимо от кода программы ;))


Сообщение отредактировал SEvg - Понедельник, 13 Октября 2014, 12:01
OpenGOOДата: Понедельник, 13 Октября 2014, 12:17 | Сообщение # 1373
почти ветеран
Сейчас нет на сайте
Как то так.

MyClass1.h
Код
#pragma once

class MyClass2;

class MyClass1                  
{
public:
    explicit MyClass1(int val) : a(val) {}
    MyClass1(int val, MyClass2& mc);
    int getA() const { return a; }
    void setB(const MyClass2& val)

private:
    int a;
    int b;
}


MyClass1.cpp
Код
#include "MyClass1.h"
#include "MyClass2.h"

MyClass1::MyClass1(int val, MyClass2& mc)
{
    a = val;
    b = mc.getB();
    mc.setA(*this);
}

void MyClass1::setB(const MyClass2& val)
{
    b = val.getB();
}


MyClass2.h
Код
#pragma once

class MyClass1;

class MyClass2
{
public:
    explicit MyClass2(int val) : b(val) {}
    int getB() const { return b; }
    void setA(const MyClass1& val);

private;
    int a;                  
    int b;
}


MyClass2.cpp
Код
#include "MyClass2.h"
#include "MyClass1.h"

void MyClass2::setA(const MyClass1& val)
{
    a = val.getA();
}


main.cpp
Код
#include "MyClass1.h"
#include "MyClass2.h"

int main()
{
    auto mc1 = MyClass1(228);
    auto mc2 = MyClass2(1488);
    mc1.setB(mc2);
    mc2.setA(mc1);
                         
    auto mc3 = MyClass2(1488);
    auto mc4 = MyClass1(228, mc3);
    return 0;
}


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]


Сообщение отредактировал OpenGOO - Среда, 15 Октября 2014, 07:06
SEvgДата: Понедельник, 13 Октября 2014, 12:48 | Сообщение # 1374
Алхимик
Сейчас нет на сайте
Код

#include <iostream>

using namespace std;

class MyClass1
{
public:
     int a;
     int b;
};

class MyClass2
{
public:
     int a;
     int b;
};

int main()
{
     MyClass1 A;
         A.a = 5;
         A.b = 7;
     MyClass2 B;
         B.a = 12;
         B.b = 17;
     cout << A.a + A.b + B.a + B.b << endl;
     return 0;
}
CARATOVДата: Пятница, 24 Октября 2014, 21:34 | Сообщение # 1375
почетный гость
Сейчас нет на сайте
Здравствуйте уважаемые форумчане подскажите пожалуйста литературу по С++

Игрострой рулит!!!
AlkoshaДата: Вторник, 28 Октября 2014, 23:15 | Сообщение # 1376
участник
Сейчас нет на сайте
Можно ли в векторе хранить структуру ?
Код
struct partic
{
int life;
float x;
float y;
float dx,dy;
int fade;
};

vector <partic> partics;


компилится без эрроров.
Код
for(int i=0;i<maxcount;i++)
     {
     partics.push_back(partic());
     inipartic(i);
     }


Но в месте присвоения значений программа крашит.
Код

void inipartic(int idx)
{
   partics[idx].life=rand()%(lifemax-lifemin)+lifemin; // тут, например.
....
}
Snake174Дата: Среда, 29 Октября 2014, 05:55 | Сообщение # 1377
участник
Сейчас нет на сайте
Цитата
Но в месте присвоения значений программа крашит.

Попробуй так:
Код

for(int i=0;i<maxcount;i++)  
      {  
      partic p;
      partics.push_back(p);  
      inipartic();  
      }

void inipartic()  
{  
    partics[ partics.count() - 1 ].life=rand()%(lifemax-lifemin)+lifemin; // тут, например.  
....  
}  


Не следует обманывать инспектора
Pipmak Assistant
Love2D Exporter
Love2D-Helpers
Old Consoles Games
OpenGOOДата: Среда, 29 Октября 2014, 15:48 | Сообщение # 1378
почти ветеран
Сейчас нет на сайте
Код у него правильный, у него ошибка времени выполнения, например (lifemax-lifemin) может быть равен 0

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
AlkoshaДата: Среда, 29 Октября 2014, 21:57 | Сообщение # 1379
участник
Сейчас нет на сайте
Цитата OpenGOO ()
у него ошибка времени выполнения, например (lifemax-lifemin) может быть равен 0


Хммм... а ведь действительно.
Ибо с присвоениями
Код
partics[idx].x=rand()%(rectangle.w)+rectangle.x;
   partics[idx].y=rand()%(rectangle.h)+rectangle.y;
   partics[idx].dx=rand()%(int)(maxspeedX-minspeedX)+minspeedX;
   partics[idx].dy=rand()%(int)(maxspeedY-minspeedY)+minspeedY;

всё ок.

Вы правы.

В таком случае , каким образом задать диапазон рандомных чисел, лежащих в пределе от lifemin до lifemax ?

rand()%(lifemax)+lifemin; тут порой будет перебор. Число будет выходить за lifemax. Надо lifemax тогда ограничить.

Может так?
int RND= lifemax-lifemin;
rand()%(RND)+lifemin;
ArchidoДата: Среда, 29 Октября 2014, 22:30 | Сообщение # 1380
Сэнсэй
Сейчас нет на сайте
Цитата Alkosha ()
В таком случае , каким образом задать диапазон рандомных чисел, лежащих в пределе от lifemin до lifemax ?

Гуглом пользоваться не учили? Это ведь в разы быстрее чем ждать ответа тут.
Код
min + (rand() % (int)(max - min + 1))


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

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