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

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

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

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

Q&A

2回答

2085閲覧

あるヘッダファイルで定義した値を他のヘッダ・ソースファイルで参照したい

notes

総合スコア3

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

0グッド

0クリップ

投稿2020/07/05 10:56

編集2020/07/05 13:11

前提・実現したいこと

該当のソースコードにあるプログラムのように、Red_Fruits.hで定義したRed redfruits()の値を、Red_Fruits.ccで定義した時、この値をYellow_Fruits.hやYellow_Fruits.ccのように他のヘッダファイルもしくはソースファイルで参照したいです。Red_Fruits.h内のRed redfruits()の定義の仕方はおかしいと感じると思いますが、このように定義できると仮定したうえで質問させていただきたいです。

発生している問題・エラーメッセージ

(*)行目のApple Red::redfruits()の後ろに";"が必要

該当のソースコード

C++

1//------------------------------------------------ 2//Red_Fruits.h 3class RedFruits { 4 Red redfruits() const;  5} 6 7//------------------------------------------------ 8//Red_Fruits.cc 9#include <Red_Fruits.h> 10Red Redfruits::redfruits() { 11 return "任意の値"; 12} 13 14//------------------------------------------------ 15//Yellow_Fruits.h 16#include <Red_Fruits.h> 17Red Redfruits::redfruits() yellow; // (*) 18 19//------------------------------------------------ 20//Yellow_Fruits.cc 21#include <Yellow_Fruits.h> 22#include <Red_Fruits.h>

試したこと

やり方として考えたのは、Yellow_Fruits.hでRed_Fruits.hをインクルードして()行のようにyellowに置き換えてあげれば、あとはYellow_Fruits.ccでYellow_Fruits.h等をインクルードすることでyellow(=Redfruits::redfruits())を参照できると思ったのですが、()の行でRedfruits::redfruits()の後ろに";"が必要だというエラーが表示されてしまっています。
なんとかしてYellow_Fruits.h(cc)でredfruitsの値を参照する方法があれば教えていただけないでしょうか。

補足情報(FW/ツールのバージョンなど)

Red_Ftuits.ccにあるように、Redfruits::redfruits()は数値の返り値を持っているように設定されています。
何か不足情報等あればご指示していただきたいと思います。

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

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

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

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

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

SHOMI

2020/07/05 11:31 編集

RedFruitsなのかRedなのか、Appleは何なのか不明ですが… やりたいのはこういうこと? #define yellow Red::redfruits() staticメンバ関数でないと呼べないけれど…
notes

2020/07/05 13:20

修正依頼をいただきありがとうございます。質問内容に誤りがあったため修正いたしました、申し訳ありません。Red_Fruits.h内redfruits()は他のクラスRedで定義された”計算式によって求められるような変数の値”になります。この値を求める計算式をRed_Fruits.cc内で定義することにより得られた計算結果の値がredfruits()に格納されます。この値をYellow_Fruits.h(cc)で参照することが目的となります。 記載しているプログラムは本当に使用しているプログラムを質問用に簡略化したものであり、質問内容の簡潔化をしようとしたのですが、かえって分かりにくくなってしまいました。申し訳ありません。
guest

回答2

0

RedFruitsなのかRedなのか、Appleは何なのか不明ですが…
RedFruitsRedの、戻り値型のRedAppleの誤りと仮定して、
redfruits()をpublicなstaticメンバ関数とすればインスタンスを生成しなくても呼べますが、こういうことですか?

C++

1class Red { 2public: 3 static Apple redfruits() const;  4} 5 6Apple Red::redfruits() { 7 return "任意の値"; 8} 9 10#define yellow Red::redfruits() 11 12int main() 13{ 14 Apple apple = yellow; 15}

関数yellow()として呼びたいなら、同様にredfruits()をpublicなstaticメンバ関数としておいて、

C++

1//Yellow_Fruits.h 2extern Apple (*yellow)(); 3 4//Yellow_Fruits.cc 5Apple (*yellow)() = Red::redfruits; 6 7int main() 8{ 9 Apple apple = yellow(); 10}

投稿2020/07/05 12:05

SHOMI

総合スコア4079

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

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

notes

2020/07/05 13:16

質問内容に間違いがあったため修正いたしました、申し訳ありません。Red_Fruits.h内redfruits()は他のクラスRedで定義された”計算式によって求められるような変数の値”になります。この値を求める計算式をRed_Fruits.cc内で定義することにより得られた計算結果の値がredfruits()に格納されます。この値をYellow_Fruits.h(cc)で参照することが目的となります。
maisumakun

2020/07/05 14:16

そのままYellow_Fruits.ccでredfruits()を呼び出す、という素直な手段は取れないのでしょうか?
notes

2020/07/05 15:45

Yellow_Fruits.ccで直接呼び出すためにRed Redfruits::redfruits() yellow; // (*)のようにしてみましたが、";"が必要という同一のエラーが生じました。この呼び出し方は適切な書き方となっていますでしょうか、よろしくお願いいたします。
maisumakun

2020/07/05 22:09

> この呼び出し方は適切な書き方となっていますでしょうか いえ、全く成立していません。「Red yellow=Redfruits::redfruits();」のようには(Redfruits::redfruitsをstaticメソッドにするなら)書けますが、初期化の時点で値を固定されます。
maisumakun

2020/07/05 22:11

yellowを立てる必要はどの程度あるのでしょうか? 使いたい箇所で直接Redfruits::redfruits()などを書く、という方が適切なようにも思えます。
SHOMI

2020/07/06 00:29

>Red_Fruits.h内redfruits()は他のクラスRedで定義された”計算式によって求められるような変数の値”になります。この値を求める計算式をRed_Fruits.cc内で定義することにより得られた計算結果の値がredfruits()に格納されます redfruits()で返るのは計算式ではなく、呼んだ時点での計算結果ですがその点は理解されていますか?
SHOMI

2020/07/06 00:41 編集

>なんとかしてYellow_Fruits.h(cc)でredfruitsの値を参照する方法があれば教えていただけないでしょうか。 staticメンバ関数でないかぎり、Redfruitsのインスタンスを作らずにRedfruits::redfruits()を呼ぶことはできません。 maisumakunさんも書かれていますが、適切なRedfruitsのインスタンスに対してredfruits()を呼ぶだけでいいのでは?
guest

0

Red_Fruits.h内のRed redfruits()の定義の仕方はおかしいと感じると思いますが、このように定義できると仮定したうえで

これはインスタンスメソッドの宣言ですので、呼ぶにはインスタンスが必要です。

投稿2020/07/05 11:20

maisumakun

総合スコア146018

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

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

maisumakun

2020/07/05 11:21

そして、「Apple Red::redfruits() yellow;」は、何をしたいのでしょうか?(文法ミスという域を通り越して、何をしたいのかの意味が取れないです)
notes

2020/07/05 13:12 編集

不十分な情報で申し訳ありません Red Redfruits::redfruits()はある計算式から得られた値の返り値を持っています その返り値をRed Redfruits::redfruits() yellow;とすることにより、Yellow_Fruits.h(cc)でその値を使えるようにしたいです。また、Red Redfruits::redfruits()の値は固定値ではありません。最終的にはyellowの値を出力するwriteという関数を定義してyellow.write(出力先path)のようにしたいと思っています。
maisumakun

2020/07/05 14:06

Redfruits::redfruits()は、「どのインスタンスに対して」呼び出すのですか?
notes

2020/07/05 15:49

知識が足らず、ご質問されていることに十分に理解することが出来ません。インスタンスは例えばint a;のように定義した時のaのことを指すと理解しています。今回の質問ではこのaにあたるのはyellowになります。Yellow_Fruits.h(cc)でインスタンスyellowにRedfruits::redfruits()を格納できるように呼び出して定義しようとしています。ご質問に対して不十分な回答でしたらご指摘いただけますでしょうか、よろしくお願いいたします。
maisumakun

2020/07/05 22:07

> ご質問に対して不十分な回答でしたらご指摘いただけますでしょうか 不十分というより、文法的に成立しません。「RedFruitの」インスタンスが必要です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問