がうまくいけば、私のタイトルがあまりにも混乱はありません。私はSFMLを使って私のゲームのサウンドマネージャーを書こうとしています。私は新しい/削除を "スマートポインタ" std :: shared_ptrに置き換えようとしています。これは私がこれまで持っていたものです。はSTDに)(構造体を一backすることはできません::ベクトル<はstd :: shared_ptrの<theStruct>> theVector
/* SoundManager.h */
#ifndef SOUNDMANAGER_H
#define SOUNDMANAGER_H
#include <SFML/Audio.hpp>
#include <string>
#include <memory>
class SoundManager
{
public:
~SoundManager();
struct jteSound
{
sf::Sound snd;
sf::SoundBuffer sndBuffer;
std::string name;
};
//Load a new sound from path and store it in audio bank bnk.
//Banks are simply std::vectors of type jteSound.
void registerNewSound(std::vector<std::shared_ptr<jteSound>> &bnk, std::string path, std::string sndName);
//Footsteps bank
std::vector<std::shared_ptr<jteSound>> bnkFootsteps;
};
#endif // SOUNDMANAGER_H
/* SoundManager.cpp */
#include "SoundManager.h"
#include <stdlib.h>
SoundManager::~SoundManager()
{
/*
//Cleanup each sound bank that we use.
for (std::vector<jteSound*>::iterator it = bnkFootsteps.begin(); it != bnkFootsteps.end(); ++it) {
delete *it;
}
*/
}
void SoundManager::registerNewSound(std::vector<std::shared_ptr<jteSound>> &bnk, std::string path, std::string sndName)
{
static int counter = 0;
for (int i = counter; counter <i+1; counter++) {
bnk.push_back(jteSound);
bnk[i]->name = sndName;
bnk[i]->sndBuffer.loadFromFile(path);
bnk[i]->snd.setBuffer(bnk[i]->sndBuffer);
}
}
bnk.push_back(jteSound);
コンパイラエラーが発生します。行を削除すると、プログラムはコンパイルされますが、クラッシュします。私はemplace_back()
またはjteSound*
またはnew jteSound
のようなものを試してみましたが、何も働きません。私はいつも長いコンパイラエラーや即座のランタイムクラッシュを取得します。私は定期的にポインタを使用して、新しい/ https://bpaste.net/show/fa684f2f2d5eとhttps://bpaste.net/show/c74ac701ce7aを参照して、削除すると予想されるように、コードが動作します。どんな考えがありがとう!
ありがとうございました! std :: make_sharedがトリックを行いました。解決済み。 – JohnBobSmith
ようこそ。 – Akira
専門とインスタンスは異なるものです。 – Deduplicator