クラス内のベクトルにいくつかの曲を追加しようとしています。私が格納している値の1つは、その曲を表すintです。本質的にカウンターです。私が追加する最初の曲は、値1、2番目の値2などが必要です。しかし、それは大きな乱数(ポジティブとネガティブ)のような他の奇妙な値を得ています。私が間違っていることを頭の中で包み込むことはできません。これはコードです:int/counterの奇妙な振る舞い
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Jukebox{
public:
void addSong(string artist, string title, string filename) {
song s {++songCounter, artist, title, filename};
Songs.push_back(s);
}
void printSong (int song) {
cout << Songs[song].no << ". ";
cout << Songs[song].artist << " - ";
cout << Songs[song].title << " : ";
cout << Songs[song].filename << endl;
}
private:
struct song {
int no;
string artist;
string title;
string filename;
};
vector<song> Songs;
int songCounter;
};
int main() {
Jukebox jbox;
jbox.addSong("U2", "Magnificent", "U2-Magnificent.mp3");
jbox.addSong("Sting", "Englishman in New York", "Sting-Englishman_in_New_York.mp3");
jbox.addSong("U2", "One", "U2-One.mp3");
jbox.printSong(0);
jbox.printSong(1);
jbox.printSong(2);
return 0;
}
更新
[OK]を、私はおそらく愚かだとこれを実装しようとする前に、クラスについての詳細をお読みください。しかし、私は読んだと思うが、私はまだそれを取得しません。これは、(動作しませんている)私のクラスは今、次のようになります。
class Jukebox(): songCounter(0)
{
public:
void addSong(string artist, string title, string filename) {
songCounter++;
song s {songCounter, artist, title, filename};
Songs.push_back(s);
}
void printSong (int song) {
cout << Songs[song].no << ". ";
cout << Songs[song].artist << " - ";
cout << Songs[song].title << " : ";
cout << Songs[song].filename << endl;
}
private:
int songCounter;
struct song {
int no;
string artist;
string title;
string filename;
};
vector<song> Songs;
};
決勝単語
[OK]をクリックします。私が見たC++のコンストラクタクラスの例から、私は彼らがどのように働いたかについて間違った印象を受けました。今私はそれを少し増やしていると思う。しかし構文はまだ私にとっては奇妙に思えます。しかし、私はもっと読むことを試みるので、私はそれを本当に理解しています。ここに私がやったことで、動作しているようですし。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Jukebox {
public:
void addSong(string artist, string title, string filename) {
songCounter++;
song s {songCounter, artist, title, filename};
Songs.push_back(s);
}
void printSong (int song) {
cout << Songs[song].no << ". ";
cout << Songs[song].artist << " - ";
cout << Songs[song].title << " : ";
cout << Songs[song].filename << endl;
}
Jukebox(): songCounter(0) {} // Constructor
private:
int songCounter;
struct song {
int no;
string artist;
string title;
string filename;
};
vector<song> Songs;
};
int main() {
Jukebox jbox;
jbox.addSong("U2", "Magnificent", "U2-Magnificent.mp3");
jbox.addSong("Sting", "Englishman in New York", "Sting-Englishman_in_New_York.mp3");
jbox.addSong("U2", "One", "U2-One.mp3");
jbox.printSong(0);
jbox.printSong(1);
jbox.printSong(2);
return 0;
}
なぜ静的ですか?あなたは...それはそれは 'Jukebox'の一員として完全に大丈夫ですが、それはintializedする必要がない、静的である必要はありません –
...あなたの本を聞いて申し訳ありません – Nim
を各ジュークボックスに異なるカウンタを持つことができます。しかし、コードスニペットを少し拡張できますか?私はそれを得ないので。以前はpythonだけしか知りませんでしたが、 'songCounter(0)'はsongCounterという名前の関数を呼び出すのと同じように見えますが、変数です。私が思うことをやろうとすると、それは間違いを起こす。私が試したことを知りたいのであれば、その質問を更新することができます。 –