• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nie mogę utworzyć tablicy w klasie

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 20 grudnia 2018 w C i C++ przez applepie Początkujący (250 p.)
#include "pch.h"
#include "Ball.h"




Ball::Ball(float t_X, float t_Y)
{
	shape.setPosition(t_X, t_Y);
	shape.setRadius(this->ballRadius);
	shape.setFillColor(Color::White);
	shape.setOrigin(this->ballRadius, this->ballRadius);
}


void Ball::draw(RenderTarget& target, RenderStates state) const //wlasciwosci obiektu
{
	target.draw(this->shape, state);
}

void Ball::update()
{
	shape.move(this->velocity); //przekazujemy wektor predkosci

	if (this->left() < 0)			//sprawdzanie krawedzi i zmiana wektora
	{
		velocity.x = ballVelocity;
	}
	else if (this->right() > 800)
	{
		velocity.x = -ballVelocity;
	}

	if (this->top() < 0)
	{
		velocity.y = ballVelocity;
	}
	else if (this->bottom() > 600)
	{
		velocity.y = -ballVelocity;
	}
}


float Ball::left()		//zwracamy krawedz bierzemy pozycje kulki i wyznaczamy
{
	return this->shape.getPosition().x - shape.getRadius();
}

float Ball::right()
{
	return this->shape.getPosition().x + shape.getRadius();
}

float Ball::top()
{
	return this->shape.getPosition().y - shape.getRadius();
}

float Ball::bottom()
{
	return this->shape.getPosition().y + shape.getRadius();
}
#pragma once
#include <SFML/Graphics.hpp>

using namespace sf;

class Ball : public sf::Drawable
{
public:
	
	Ball(float t_X, float t_Y);
	Ball() = delete ;
	~Ball() = default;

	void update();

	float left();		//krawedzie ksztaltu
	float right();
	float top();
	float bottom();

private:
	CircleShape shape;
	const float ballRadius{ 10.0f };
	const float ballVelocity{ 10.0f };
	Vector2f velocity{ ballVelocity, ballVelocity }; //wektor predkosci w obydwu plaszczyznach
	void draw(RenderTarget& target, RenderStates state) const override;
};

// Hello_world.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include "pch.h"
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include "Ball.h"

using namespace sf;
using namespace std;

int main()
{	
	Ball ball(300, 300);	
	
	RenderWindow window{ VideoMode{800,600}, "Hello!" };
	window.setFramerateLimit(60);
	Event event;


	while (true)
	{
		window.clear(Color::Red);
		window.pollEvent(event);
		if (event.type == Event::Closed)
		{
			window.close();
			break;
		}

		ball.update();
		window.draw(ball);


		window.display();
	}
	return 0;
}

Witam, zacząłem zabawę w SFML'u i mam problem. Nie wiem jak utworzyć tablicę w klasie. Wydaje mi się to bardzo łatwe ale po wielu próbach poddałem się. 

komentarz 20 grudnia 2018 przez niezalogowany
    while (true)
    {
        window.clear(Color::Red);
        window.pollEvent(event);
        if (event.type == Event::Closed)
        {
            window.close();
            break;
        }

To jest bez sensu. Zrób to tak.

komentarz 20 grudnia 2018 przez applepie Początkujący (250 p.)
Tak też to zauważyłem, robię to z tutoriala i jestem na początku stąd też taka pętla.
komentarz 20 grudnia 2018 przez niezalogowany
Z jakiego tutoriala się uczysz?
komentarz 20 grudnia 2018 przez applepie Początkujący (250 p.)
https://www.youtube.com/watch?v=JIad3X3PX6o&t=2s

Docelowo chce zrobić zachowanie cząsteczek. W ramach rozwinięcia tego co się nauczłem z odcinka chciałem dodać kilka kulek i dodać odbicia pomiedzy nimi.
komentarz 20 grudnia 2018 przez niezalogowany
Ten tutorial jest bez sensu;/ Wymyślił sobie błędny wzorzec, który może nie wyłapać wszystkich eventów i jeszcze uczy tego innych... Nie wspominając o jakości tłumaczeń i dźwięku.

1 odpowiedź

+1 głos
odpowiedź 20 grudnia 2018 przez RafalS VIP (122,820 p.)
wybrane 20 grudnia 2018 przez applepie
 
Najlepsza

Fajnie, że załączyłeś mase kodu nie związaną z problemem, a samego problemu nie uwzględniłeś - no chyba ze ja jestem slepy.

Nie wiem w czy masz problem. Przykłady tablic w klasie:

class A{
    int tab[10];
    std::array<int,10> array;
    std::vector<int> vector;
    int * dynamic_tab = new int[10];
};

 

komentarz 20 grudnia 2018 przez applepie Początkujący (250 p.)

Rzeczywiście bez sensu tyle wstawiłem, przepraszam. Ogólnie to chodzi o to żeby utworzyć ileś tam tysięcy obiektów ball ale tworząc ją analogicznie jak int nie wychodzi mi.

Ball(float t_X, float t_Y); // To jest w nagłówku

Ball::Ball(float t_X, float t_Y)
{
    shape.setPosition(t_X, t_Y);
    shape.setRadius(this->ballRadius);
    shape.setFillColor(Color::White);
    shape.setOrigin(this->ballRadius, this->ballRadius);
}

main()
{
//Jak stworzyć obiekt będący tablicą
}

 

 

komentarz 20 grudnia 2018 przez RafalS VIP (122,820 p.)
No to wszystko jasne. Żebyś mógł stworzyć tablice jakiegoś typu to ten typ musi mieć konstruktor bezargumentowy. Klasa Ball go nie ma, więc sie nie da.
komentarz 20 grudnia 2018 przez applepie Początkujący (250 p.)
No tak też zauważyłem że te nawiasy mi przeszkadzają. Próbowałem dodać wartość domyślną

Ball::Ball(float t_X = 1, float t_Y = 1)

Ale też nie jest rozwiązaniem.

No dobra ale jak dodam konstruktor bezargumentowy to w jaki sposób nadać położenie kuli?
komentarz 20 grudnia 2018 przez applepie Początkujący (250 p.)
class A
{
public:
	A(){
		int x;
		int y;
	}
};
int main()
{
	A tablica[10];
	tablica[1].x = 10;
	return 0;
}

I mam błedy "A" has no member "x"

 

komentarz 20 grudnia 2018 przez RafalS VIP (122,820 p.)

Kompilator słusznie mówi. x i y to zmienne lokalne w ciele konstruktora. Wystarczy coś takiego:

class A{
public:
    int x,y;
    A(){
        x = 0;
        y = 0;
    }
};

Aczkolwiek jesli klasa ma miec publicznie dostepne skladowe to lepiej zeby byla struktura bez duzej ilosci logiki (metod). Ale to już tylko dobre praktyki. Naucz się co działa a co nie a wtedy będziesz wybierał słuszne scieżki spośród wielu działających

komentarz 20 grudnia 2018 przez applepie Początkujący (250 p.)

O właśnie o to mi chodziło!

Bardzo dziękuję za pomoc smiley

Podobne pytania

0 głosów
1 odpowiedź 267 wizyt
pytanie zadane 12 lipca 2022 w C i C++ przez cpp_lover Początkujący (290 p.)
0 głosów
2 odpowiedzi 367 wizyt
0 głosów
2 odpowiedzi 141 wizyt
pytanie zadane 13 września 2018 w PHP przez DudSon Użytkownik (680 p.)

92,551 zapytań

141,395 odpowiedzi

319,526 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...