I'm trying to add some songs to a vector inside a class. One of the values I'm storing is an int representing the song. It's essentially a counter. The first song I add should have the value 1, the second value two and so forth. But It's getting other strange values like big random numbers (positives and negatives). I can't wrap my head around what I'm doing wrong. This is the code:
#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;
}
Update
Ok, I'm probably stupid and should read more about classes before trying to implement this. But I think I did read and I still don't get it. This is what my class looks like now (which won't work):
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;
};
Final word
Ok. From the example I've seen of c++ contructor classes I had some kind of wrong impression of how they worked. Now I think I'm getting it a little bit more. But the syntax still seems strange to me. But I try to read more so I really understand it. Here is what I did and to seems to work:
#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;
}
 
     
     
     
     
    