일부 노래를 클래스의 벡터에 추가하려고합니다. 저장하고있는 값 중 하나는 노래를 나타내는 int입니다. 근본적으로 카운터입니다. 내가 추가하는 첫 번째 노래에는 값 1, 두 번째 값 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;
}
업데이트, 아마 바보와이를 구현하기 전에 클래스에 대한 자세한을 읽어야 할 사람 :이 코드입니다. 그러나 나는 내가 읽었고 나는 아직도 그것을 얻지 않는다고 생각한다. 이것은 (작동하지 않을 것이다) 내 수업은 지금 모습입니다 :
확인
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;
};
최종 단어. 내가 본 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'멤버로서 완벽하게 괜찮습니다.하지만 초기화 할 필요가 있습니다. – Nim
죄송합니다. 하지만 코드 스 니펫을 약간 확장 할 수 있습니까? 왜냐하면 나는 그것을 얻지 못하기 때문입니다. 이전에 파이썬 만 알았던'songCounter (0)'는 songCounter라는 함수를 호출하는 것처럼 보이지만 변수입니다. 내가 생각하는 것을하려고하면 오류가 발생합니다. 내가 뭘했는지 알고 싶다면 질문을 업데이트 할 수있다. –