error C2064 が出て実行できません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
melfis
記事: 8
登録日時: 6年前

error C2064 が出て実行できません

#1

投稿記事 by melfis » 5年前

下記のようにプログラムを書いたところ
2 IntelliSense: 呼び出しのかっこの前の式は、関数型 (または pointer-to-function 型) である必要があります
エラー 1 error C2064: 1 引数を取り込む関数には評価されません。

というエラーが出るのですが、何が問題であるか分かりません。どなたか知恵をお貸し頂ければ幸いです。

===以下main.cpp===
#include<stdio.h>
#include"sort.h"
#include"list.h"

int list[length] = { 5, 6, 1, 2, 4, 3, 8, 9, 7, 0 }; //長さ”length”の配列を設定し、それぞれに数字を代入
int count = 0;

void main(){ //以下main関数(実際に実行される中身)

insertion(list);

for (int i = 0; i < length; i++){
printf("%d\n", list);
} //整列されたlistの中身を順番に書き出す
printf("入れ替えの回数は%d回でした", count);
}

===以上main.cpp===
===以下insertion.cpp===
#include<stdio.h>
#include"list.h"

int insertion(int a[length]){ //以下挿入法のソース
for (int i = 1; i < length; i++){
if (a>a){
int x = a;
a = a;
int j = i - 2;
while (j >= 0 && a[j]>x){
a[j + 1] = a[j];
j--;
count++; //入れ替えの回数を増やす
}
a[j + 1] = x;
}
}
return 0;
}
===以上insertion.cpp===
===以下sort.h===
int HeapSort;
int insertion;
int Qsort;
===以上sort.h===
===以下list.h===
#define length 10

extern int list[length];
extern int count;
===以上list.h===

環境はVC++2013を使用しています。
問題点はmain.cppの10行目
insertion(list);
の部分のようですが原因がよく分かりません。
プログラムの内容としては、配列listを小さい巡に並べ替えるだけの単純なものです。
又、QsortとHeapSortについては別の.cppで書いていますが、(今のところ使っていないので)関係は無いと思い書いていないのですが、もし必要でしたら追記致します。
両方ともinsertionと同じようなソートプログラムで、その二つでも試して見ましたが同じエラーが出て実行できませんでした。

Rittai_3D
記事: 525
登録日時: 7年前

Re: error C2064 が出て実行できません

#2

投稿記事 by Rittai_3D » 5年前

ソースコードを貼る場合はcodeタグで囲ってください。
フォーラムルールをお読みください。

「error C2064」で検索した一番上の記事の
https://msdn.microsoft.com/ja-jp/library/z72c1dfd.aspx
が参考になるかもしれません。

ざっとしかコードを読んでいませんが、

extern int list[length];
extern int count;
と、main.cppの
int list[length] = { 5, 6, 1, 2, 4, 3, 8, 9, 7, 0 }; //長さ”length”の配列を設定し、それぞれに数字を代入
int count = 0;
の名前が被っているのが気になります。名前を変えて実行してみてください。

また、C++ではmain関数はint型である必要があります。
初心者です

アバター
みけCAT
記事: 6273
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: error C2064 が出て実行できません

#3

投稿記事 by みけCAT » 5年前

melfis さんが書きました:===以下sort.h===
int HeapSort;
int insertion;
int Qsort;
===以上sort.h===
ここが間違っています。

コード:

int HeapSort;
int insertion(int a[]);
int Qsort;
としてみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6273
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: error C2064 が出て実行できません

#4

投稿記事 by みけCAT » 5年前

Rittai_3D さんが書きました:extern int list[length];
extern int count;
と、main.cppの
int list[length] = { 5, 6, 1, 2, 4, 3, 8, 9, 7, 0 }; //長さ”length”の配列を設定し、それぞれに数字を代入
int count = 0;
の名前が被っているのが気になります。名前を変えて実行してみてください。
ここはあまり関係ないと思います。
どうせ使っていないようですが、むしろ同じ名前でないと意味が無いでしょう。
Rittai_3D さんが書きました:また、C++ではmain関数はint型である必要があります。
main関数「の戻り値」はint型である必要があります。
C - void main()をめぐるどうでもいい話 - Qiita
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

melfis
記事: 8
登録日時: 6年前

Re: error C2064 が出て実行できません

#5

投稿記事 by melfis » 5年前

>Rittai_3D 様
ソースの件、大変失礼いたしました。以後気をつけます。

>みけCAT 様
ご指摘の通り変更したところ、無事思い通り動作しました。
ありがとうございます。

ISLe()

Re: error C2064 が出て実行できません

#6

投稿記事 by ISLe() » 5年前

みけCAT さんが書きました:
Rittai_3D さんが書きました:また、C++ではmain関数はint型である必要があります。
main関数「の戻り値」はint型である必要があります。
C - void main()をめぐるどうでもいい話 - Qiita
言語仕様で、関数型としてT型の関数という場合、T型の値を返却する関数のことであるという記述があるので、3Dさんの記述は間違っているとは思えないのですが。

リンク先の記事は、C99では『ホスト環境において』その他の方法(関数原型)が含まれたのを拡大解釈しているのでは。
この記事自体からミスリーディングを誘う意図を感じます。

そもそもこのような指摘を行うみけCATさんがトピックが荒れることを望んでいるように感じます。

閉鎖

“C言語何でも質問掲示板” へ戻る