質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

7802閲覧

C++で他のクラスの変数の参照方法の仕方

nqf27650

総合スコア115

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/05/03 08:40

mainの中で、クラスAudioTest audio;を実装しています。
このクラスaudioの中で、宣言されている、QAudioOutput *m_audioOutput;
を、他のクラスGeneratorの中で参照する方法があれば、お教えください。
例えば、audio.m_audioOutput->関数()と出来ないかと考えています。

尚、 Generatorは下記の如く、 AudioTest の中で下記の如く宣言されています。
m_generator = new Generator(m_format, DurationSeconds*1000000, ToneSampleRateHz, this);

また、audiooutput.hに対応する実装部のaudiooutput.cppは、ここには記載していません。

//main.cppファイル=================
#include <QApplication>
#include "audiooutput.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
app.setApplicationName("Audio Output Test");

AudioTest audio; <ーーここで宣言されています。
audio.show();

return app.exec();
}

//audiooutput.hファイル========================
//この中に、2個のクラスclass Generatorとclass AudioTest が宣言されています。
#ifndef AUDIOOUTPUT_H
#define AUDIOOUTPUT_H
class Generator : public QIODevice
{
Q_OBJECT

public:
Generator(const QAudioFormat &format, qint64 durationUs, int sampleRate, QObject *parent);
~Generator();
....
....
}

class AudioTest : public QMainWindow
{
Q_OBJECT

public:
AudioTest();
~AudioTest();
QAudioOutput *m_audioOutput;
....
....
}
#endif // AUDIOOUTPUT_H

以上、宜しくお願いします。
// ~/Qtx/audiooutput/audiooutput.h

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koko_u

2017/05/03 10:19

通常はメンバー変数は隠蔽して、外部から直接アクセスできないようにするのが常套手段なので、なぜ m_audioOutput を、しかもポインタ変数を別のクラスから触りたいのか、その止むにやまれぬ理由を補足した方が適切な回答が付くと思います。
guest

回答3

0

自己解決

下記の如く、汎用変数AudioTest *m_audiotestを使用すれば、Generatorクラスから
AudioTestクラスの関数を参照できる様です。

AudioTest *m_audiotest;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
app.setApplicationName("Audio Output Test");

AudioTest audio;//AudioTest m_audiotest=&audio; audio.show(); return app.exec();

}

投稿2017/05/03 10:46

nqf27650

総合スコア115

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

単純にオブジェクトのフィールドのやりとりであれば、普通はgetterメソッドで実現できます。

が、題意からはどうもクラスの設計がわからないので、見えない部分もあります。一度クラスの関係を整理することをお勧めします。

投稿2017/05/03 09:34

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C++は勉強中なので上手く説明できませんが、
Generatorクラスをaudioのfriendクラスに指定すれば行けるのでは無いでしょうか?

friendクラスとか関数で検索すれば色々出てきます。

http://ppp-lab.sakura.ne.jp/cpp/language/022.html
http://wisdom.sakura.ne.jp/programming/cpp/cpp24.html


質問とは直接関係ないですが、
複数行のソースコードはMarkdown記法を使ってバッククォート3つ、
1行ならバッククォート1つで挟むと見やすくなります。

#includeの所がH1見出しになって見にくいのでよろしくお願いします。

c++

1#include <QApplication> 2#include "audiooutput.h" 3 4int main(int argc, char *argv[]) 5{ 6QApplication app(argc, argv); 7app.setApplicationName("Audio Output Test"); 8 9AudioTest audio; <ーーここで宣言されています。 10audio.show(); 11 12return app.exec(); 13}

投稿2017/05/03 09:08

編集2017/05/03 09:25
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問