• ベストアンサー

戻り値の型??

プログラムをコンパイルした際に エラーと警告がありますよね? そこで、警告というので 「関数に戻り値の方が指定されていません。」 というのが出現して、 「void型とみなします。」 というのが出てきて、 一応作業は進められます。 でも本当にそれでいいのか心配です。 大丈夫でしょうか? それをそうやって修正したらよいでしょうか? 手持ちのテキストには エラーのときの対処法などが書いてないので 何かよいHPか本とかないでしょうか? あったら教えてください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tdlemon
  • ベストアンサー率37% (3/8)
回答No.5

他の方の説明で充分なので、補足程度に。 int Func(); 関数が上の場合と仮定して、その関数の記述の中に、 int Func(){ int a; 何らかの処理 return a; } その戻り値の型の変数を宣言し、その関数の最後らへんに return a; とすると値を返すので、エラーはなくなると思います。 ちなみにメインの関数の中で、  (int型の変数)= Func(); とするとその変数にaの値を入れることが出来ます。 もうひとつ付け足すとif文の中で if( Func() >= 3) などとして、関数の実行とその得られた値の比較を同時に出来ます。 これは行数も節約できるので、結構使えます。

その他の回答 (4)

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.4

関数から戻ったあと戻り値を使わないのなら、警告は無視してかまいません。 もし使うのなら、しかるべき型を指定して下さい。指定の仕方は他の方が書かれています。

  • brogie
  • ベストアンサー率33% (131/392)
回答No.3

C言語学習塾 http://www.orchid.co.jp/computer/cschool/cschool.html C言語ばばな塾 http://www.bekkoame.ne.jp/~medaka/r_c/c_class.html アルゴリズム入門 http://www.geocities.co.jp/SiliconValley-Oakland/4287/algorithm.html C/C++リンク集 http://www.cs.kyoto-su.ac.jp/~minaken/Link/Gengo/c.html WinAPIプログラミング(後で必要になると思います) http://www.os.xaxon.ne.jp/~bunyan/program/sdk/program_api.htm 晃くんのプログラミング入門 http://www.owari.ne.jp/~gguy/ 講座を中心に紹介しました。

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.2

 こんにちは、honiyonです。  読んで字の如くです。 戻り値の型を指定していますか?  戻り値の型が分からないので、とりあえず void型を戻り値とするよ、という意味です。  その警告を消すには、明示的に戻り値の型を指定してください。  詳しくは、関数の宣言の仕方を調べれば載っています。  参考URLに、Visual C++のメーリングリストのURLを載せておきます。  ここで記事を検索すれば、大体の事は分かるでしょう。  他にも Visual C++を話題とするMLはたくさんあると思います。  参考になれば幸いです(..

参考URL:
http://www.freeml.com/ml_mess.php?ml=vcpp_programing
回答No.1

関数にも引数・戻り値の「型」をしてする必要があります。 つまりは、 int hogehoge(int a, int b) {  ・・・・ } のような記述になります。 また、戻り値が無ければ、「void」型となりますので、 void hogehoge(int a, int b) のように定義する必要があります。

関連するQ&A

  • 戻り値について

    プログラミング初心者です。 よろしくお願いします。 C++を使っています。 早速なのですが、以下にプログラムを記載します。 ◎1---------------------------------------- #include<stdio.h> main() { char ss[256]; gets(ss); puts(ss); } ---------------------------------------- ◎1を実行すると、「型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません」と表示されます。 参考書には、「戻り値のvoidがないと勝手に戻り値の関数をint型と解釈する。関数の宣言と定義が合わないとコンパイル時にエラーとなる」とあったのですが、 ◎2------------------------------------- #include<stdio.h> int main() { char ss[256]; gets(ss); puts(ss); } ------------------------------------- 以上の◎2だと、なぜ実行出来るかよくわかりません。 本当に初心者的な質問ですいませんが、教えていただけると嬉しいです。

  • 関数の戻り値について

    多くのプログラムをつくったわけでは無いので、実際に不便を感じているわけではないのですが、関数の戻り値って1つですよね。 想像するに、2つ以上返してほしいと思うことが多々あるのではないかと思えるのですが、そのような時にはどのように対処するのでしょうか? 私なら、例えば2つの数字を返してほしいとすると、2つを並べた1つの数字を返してもらい、受け取ってから2つに分けるようなことを考えてしますのですが・・・

  • C++基底クラスに戻り値の異なる関数が宣言されている場合

    こんにちは。 質問させてください。 以下のようなコードがあったとします。 class Base1 { public:   virtual int get()=0; }; class Base2 { public:   virtual float get()=0; }; class Ex : public Base1, public Base2 { public:   int get(){return 0;}   float get(){return 0.0f;} }; void main() { } このプログラムをコンパイルすると 「'Ex::get': オーバーライドする仮想関数の戻り値の型が異なり、'Base1::get' の covariant ではありません。」 というエラーが出てしまいます。 関数の名前と引数が同じで戻り値だけが異なる場合はエラーが出るのはわかるのですが、基底クラスのBase1、Base2は変更不可能だとするとどのように回避すればいいのでしょうか? よろしくお願いします。 /*   WindowsXP Professional SP3   VisualStudio2005 AcademicEdition */

  • ポインタを使って構造体の配列を戻り値にするには

    関数の戻り値を構造体の配列(アドレスを受け渡しを利用して)にしたいのですがうまくゆきません。 以下のプログラムではコンパイルはできるのですが、 a0 = 2 a1 = 4198512 a2 = 4329332 と表示されてしまいa1,a2がうまくゆきません。 ********************************************* #include<stdio.h> struct test{ int a; }; struct test *func(void); void main(void) { struct test *data;//構造体ポインタ int i; data = func(); //ポインタにtest関数の戻り値(アドレス)を代入 for(i=0;i<=2;i++){   printf("a%d = %d\n",i,(data+i)->a); //構造体要素を表示 } } struct test *func(void) { struct test data[3]={1,2,3}; //構造体配列を定義 return (&data[0]); //構造体配列の先頭アドレスを返す } ************************************************* test関数から受ける取ったアドレス(&data[0])をポインタ(data)に代入して1づつずらして表示させれば a0=1,a1=2,a=3 となると思ったのですがどこが間違っているのでしょうか? よろしくお願いします。

  • recvfrom関数の戻り値について

    初めて質問させて頂きます。 現在、LinuxのUnixドメインを使用した内部通信プログラムを 作成しているのですが、recvfrom関数の戻り値で-512という値が 返ってきて頭を悩ませています。 いろいろなHP等でrecvfrom関数の戻り値について記述されている内容は 受信サイズか-1となっているのですが・・・-512という値については さっぱりでした。 -1の場合は、errnoが入るようなのですが、-512の場合、errnoが0のままで何もはいっていないように見えます。 どの様な問題が発生しているかの見当もつかない状態です。 すみませんが、宜しくお願い致します。

  • Objective-cの型の初期化について質問です。

    Objective-cの型の初期化について質問です。 たとえば次のようなfloat型の戻り値関数を定義していて、 ----------------- - (float) getMoveSize { float moveSize = 1.1f; return moveSize; } ----------------- 関数の戻り値を取得しようとするとコンパイルエラーになります。 ----------------- float height = [self getMoveSize]; //→error: incompatible types in initialization ----------------- どのようにすればよいか教えて下さい。 float height = 0.0f; height += [self getMoveSize] みたいなことをやりたいだけです。

  • java 戻り値についての質問です。

     戻り値を使ったプログラムを作成したところエラーが出たのですが、どこを修正しなければならないのかわかりません。 [プログラム] public class Main31{ public static int add(int x, int y){ int ans = x + y; return ans; } public static void main(String[] args){ int ans = add(100 , 10); System.out.println(x +"+"+y+"="+ans); } } [エラーの内容] Main31.java:12: エラー: シンボルを見つけられません System.out.println(x +"+"+y+"="+ans);     ^ シンボル: 変数 x 場所: クラス Main31 Main31.java:12: エラー: シンボルを見つけられません System.out.println(x +"+"+y+"="+ans);      ^ シンボル: 変数 y 場所: クラス Main31 エラー2個 どこを直せば良いのかと、このプログラムだとエラーが出てしまう理由を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 関数名、パラメータは同じで、戻り値によって異なる処理?

    戻り値というより、受け側によって関数の振る舞いを変えたいのですが、 C++では、同名、同パラメータはC2556のコンパイルエラーになります。 Perlでいうリスト値を返すかスカラー値を返すかは呼び出し側によるようなことをしたいのですが、C++では無理でしょうか? 下の例では、//...部分は戻り値によって異なるのでC++のテンプレート?では無理そうですが、そんなことはC++でできるのでしょうか? 似たようなテクニックでも構いませんので、知識の豊富な方、教えてください。 #include <iostream> #include <string> using namespace std; class A { public: A(){} ~A(){} int test(int x, int y){           //... return 0; } string test(int x, int y){ // ... return ""; } }; void main(void){ A a; int ret1 = a.test(1,2); string ret2 = a.test(1,2); cout << endl << "End..." << endl; }

  • exitってどう使うの?

    exitを使いたいのですが、プログラムが終了しません。 コンパイルも通りません。 警告:コードは効果を持たない(関数 exit) エラー:ステートメントにセミコロンが無い(関数 exit) と出ます。 windowsでC言語書いています。 入力した数値分「警告」を表示するプログラムなのですが #include <stdio.h> #include <stdlib.h> void exit(int x) { while(x-- > 0){ if(x==0){ printf("警告!\n"); exit 0; } printf("警告!残り%d回。\n", x); } } int main() //警告を表示する回数を変数に代入するプログラムvoid exitのxに渡す。 どうすればexitの位置でプログラムが終了するようにできるのでしょうか。 どなたか教えていただけないでしょうか。

  • jQueryの戻り値がうまくいかない・・・

    jQueryでXMLを読み込んでパースした値を戻り値として返す関数を作っているのですが、なぜか動作しません。 すみませんがどこがいけないのか教えていただけないでしょうか? -- JS ---------------------- function getValueXML(){   var value = "初期値";   jQuery.ajax({     url: "/text.xml",     type: 'get',     dataType: 'xml',     timeout: 1000,     success: parse_suc,     error: parse_err   });   function parse_suc(xml){    value = $(xml).find("hoge").text();   }   function parse_err(){    alert("XMLの取得に失敗しました");   }   return value; } -- test.xml --------------------- <?xml version="1.0" encoding="UTF-8"?> <root>   <hoge>テスト</hoge> </root> このgetValueXML関数を実行すると戻り値には"初期値"が返ってきます。 試しにparse_suc関数を以下のようにしてみたら"テスト"がアラート表示されました。 つまりparse_suc関数内ではXMLのパースがうまくいっているようなのです。 function parse_suc(xml){   value = $(xml).find("hoge").text();   alert(value); } しかしparse_suc関数を出るとvalueにはその値が引き継がれません。 valueのスコープがjQueryだとどういう風になっているのかよくわからなく、ずっと悩んでいます。 お手数ですがおわかりの方がいましたらご説明頂ければと思います。

専門家に質問してみよう