std :: list 내부에 저장된 메서드로부터 메서드를 호출해야합니다. 현재 루프가 실행되고 내부의 인쇄물이 콘솔에 인쇄되지만 목록 안의 요소는 실제로 예상 한 내용을 인쇄하지 않습니다.반복자에서 메서드 호출하기
#include "TextWindow.hpp"
#include "TextElement.hpp"
#include <iostream>
TextWindow::TextWindow(const TextureHolder& textures, const FontHolder& fonts, sf::Window& windows, Fonts::ID fontID, sf::String text)
: mSprite(textures.get(Textures::WindowDefault))
, mHitpoints(10)
, mWindow(windows)
{
sf::FloatRect bounds = mSprite.getLocalBounds();
mSprite.setOrigin(bounds.width/2.f, bounds.height/2.f);
addElements(text, fonts.get(fontID));
}
void TextWindow::addElements(sf::String text, sf::Font font)
{
TextElement e(text, font, 10, xPos, yPos, 10, 10);
mElements.push_back(e);
}
void TextWindow::drawCurrent(sf::RenderTarget& target, sf::RenderStates states) const
{
target.draw(mSprite, states);
for(std::list<Element>::const_iterator iterator = mElements.begin(); iterator != mElements.end(); ++iterator)
{
//std::cout << "IN TEXTWINDOW PRINT ITERATOR" << std::endl;
(*iterator).drawCurrent(target, states);
}
}
void TextWindow::updateCurrent(sf::Time dt)
{
}
그리고
#include "TextElement.hpp"
#include <iostream>
TextElement::TextElement(sf::String text, sf::Font font, int textSize, int xOrig, int yOrig, int xPos, int yPos)
: mText(text, font, textSize)
, xpos(xPos)
, ypos(yPos)
{
mText.setOrigin(xOrig, yOrig);
mText.setColor(sf::Color::Green);
}
void TextElement::drawCurrent(sf::RenderTarget& target, sf::RenderStates states) const
{
std::cout << "TEXTELEMENT" << std::endl;
target.draw(mText, states);
}
void TextElement::updateCurrent(sf::Time dt)
{
//Do nothing, text doesn't need to update!
}
어떤 제안이 다음은 관련 파일은?
편집 : 나는 수 std 변수에 대한 모든 참조를 변경 한
1>------ Build started: Project: Byte, Configuration: Debug Win32 ------
1> TextWindow.cpp
1>e:\gamedev\c++\byte\byte\textwindow.cpp(19): error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
1> with
1> [
1> _Ty=Element
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\memory(2350) : see declaration of 'std::unique_ptr<_Ty>::unique_ptr'
1> with
1> [
1> _Ty=Element
1> ]
1> Generating Code...
1> Compiling...
1> Generating Code...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
:: unique_ptr : :: 수 std 목록을 변경 unique_ptr 후, 나는 다음과 같은 오류가 발생합니다. 위에 게시 한 무엇, 그것은 mElements
처럼 보이는
#include "TextWindow.hpp"
#include "TextElement.hpp"
#include <iostream>
TextWindow::TextWindow(const TextureHolder& textures, const FontHolder& fonts, sf::Window& windows, Fonts::ID fontID, sf::String text)
: mSprite(textures.get(Textures::WindowDefault))
, mHitpoints(10)
, mWindow(windows)
{
sf::FloatRect bounds = mSprite.getLocalBounds();
mSprite.setOrigin(bounds.width/2.f, bounds.height/2.f);
addElements(text, fonts.get(fontID));
}
void TextWindow::addElements(sf::String text, sf::Font font)
{
std::unique_ptr<TextElement> e(new TextElement(text, font, 10, xPos, yPos, 10, 10));
mElements.push_back(e);
}
void TextWindow::drawCurrent(sf::RenderTarget& target, sf::RenderStates states) const
{
target.draw(mSprite, states);
for(std::list<std::unique_ptr<Element>>::const_iterator iterator = mElements.begin(); iterator != mElements.end(); ++iterator)
{
//std::cout << "IN TEXTWINDOW PRINT ITERATOR" << std::endl;
(*iterator).get()->drawCurrent(target, states);
}
}
void TextWindow::updateCurrent(sf::Time dt)
{
}
그래서 모든 반복마다 함수를 호출하려면 반복자가 필요합니까? –
예. 그 방법은 목록에 저장된 것입니다. – Charsmud