Juan Rodriguez
Juan Rodriguez

Reputation: 17

inheritance in Qt won't allow me to reference?

So I I have an h file and a cpp file in a Qt project. I have to declare some qstrings inside my header file and I would like to reference them in my cpp file but I don't seem to be able to access it, can someone explain why or the correct way to do it?

#ifndef PROFILE_H
#define PROFILE_H

#include <QMainWindow>
#include "login.h"
#include "searchnote.h"
#include "note.h"
#include <QDebug>

namespace Ui {
class Profile;    
}

class Profile : public QMainWindow
{
    Q_OBJECT

public:
    explicit Profile(QWidget *parent = 0);
    ~Profile();

private slots:
    void on_actionAdd_Note_triggered();

private:
    Ui::Profile *ui;

private:
    QString name;
    QString major;
    QString school;
    Note myNoteList;    
};

#endif // PROFILE_H


#include "profile.h"
#include "ui_profile.h"    

Profile::Profile(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Profile)
{
    ui->setupUi(this);
}

Profile::~Profile()
{
    delete ui;
}

void Profile::on_actionAdd_Note_triggered()
{
    SearchNote openSearch;          //will send us the searchNote gui
    openSearch.setModal(true);
    openSearch.exec();    
}

void myNoteListAdd(QString newName){
    myNoteList.add();                //the cpp file doesnt recognize this object        
}

Upvotes: 0

Views: 59

Answers (2)

mike
mike

Reputation: 1322

It may be the case that you intend myNoteListAdd to be a member function of Profile, i.e.

class Profile : public QMainWindow
{
    Q_OBJECT

public:
    explicit Profile(QWidget *parent = 0);
    ~Profile();

private slots:
    void on_actionAdd_Note_triggered();
    **void myNoteListAdd(QString newName);**
private:
    Ui::Profile *ui;

private:
    QString name;
    QString major;
    QString school;
    Note myNoteList;    
};

And implement as:

void Profile::myNoteListAdd(QString newName){
    myNoteList.add(newName);                // assuming you want to add newName to myNoteList
}

Otherwise, you need some form of accessing the member myNoteList, either by making it public or having a getter member. In either case you need an instance of a Profile to work with, i.e.:

class Profile : public QMainWindow
{
    Q_OBJECT

public:
    explicit Profile(QWidget *parent = 0);
    ~Profile();

   //either this:
    Note myPublicNoteList;   
    // or this 
    Note getNoteList() { return myNoteList; }

private slots:
    void on_actionAdd_Note_triggered();        
private:
    Ui::Profile *ui;

private:
    QString name;
    QString major;
    QString school;

};

then in your .cpp

void myNoteListAdd(QString newName)
{
  Profile p = new Profile(); // or some other mechanism to get a Profile
  //then either
  p.myPublicNoteList.add(newName);
  // or 
  p->getNoteList().add(newName);
}

Upvotes: 0

Kevin Krammer
Kevin Krammer

Reputation: 5207

myNoteListAdd is a stand-alone function, myNoteList is a private data member of Profile class. Only member functions (often also called methods) of the same class can access these private data members

Upvotes: 1

Related Questions