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

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

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

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

Q&A

解決済

3回答

7715閲覧

C++におけるエラー")が必要です"

muton

総合スコア31

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

0グッド

0クリップ

投稿2019/01/16 03:48

該当のソースコード

C++

1#include <iostream> 2 3void MainFunc()//タイマーをセットする関数 4{ 5 int SetTimer(1, 1000, NULL); // タイマを設定する 6 // 引数の意味(タイマーID、呼び出す間隔(ms), NULLでOK) 7} 8 9// タイマーが呼ばれた時の処理を記述する 10void OnTimer(int nIDEvent) 11{ 12 if (nIDEvent == 1) 13 { // 1番目のタイマーの時 14 std::cout << "kotai" << std::endl; 15 } 16 17 OnTimer(nIDEvent); 18} 19 20void StopTimer()//必要なくなったらタイマーを止める!!! 21{ 22 bool KillTimer(1); // 1番目のタイマーを止める 23} 24

発生しているエラー

SetTimer関数を用いて一秒間に一回kotaiと表示するコードを組みたいと考えています. そこで上記の様にコードを書いたのですが,下記のエラーが発生します. 構文上")"が足りないと思えないのですが,どのようなことが原因として考えられるでしょうか.宜しくお願い致します. 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー (アクティブ) E0018 ')' が必要です Project5 C:\Users\owner\source\repos\Project5\Project5\Source.cpp 5

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

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

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

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

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

takabosoft

2019/01/16 04:26

環境が書いてありませんが、Windowsのコンソールアプリですか?
muton

2019/01/16 04:41

すみません,環境はVisual studio2017のC++です.
takabosoft

2019/01/16 04:44

はい、で新規作成時に使っているテンプレートはどれですか?「Win32 コンソールアプリケーション」ですか?
muton

2019/01/16 04:54

空のプロジェクトを用いて新規作成しました.また,Visual Studio 2017 Update 3 以降なので「Win32 コンソールアプリケーション」はなくなっています. 宜しくお願い致します.
guest

回答3

0

ベストアンサー

関数定義と呼び出しを混同しています。
単に SetTimer(1, 1000, NULL); とだけ書けば良いのです。

投稿2019/01/16 03:51

LouiS0616

総合スコア35660

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

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

muton

2019/01/16 03:53

回答ありがとうございます. intをなくすと 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー (アクティブ) E0020 識別子 "SetTimer" が定義されていません Project5 C:\Users\owner\source\repos\Project5\Project5\Source.cpp 5 の様なエラーが出てしまうのですが,対策などはありますでしょうか. 宜しくお願い致します.
LouiS0616

2019/01/16 03:55

必要なヘッダをインクルードしてないのでは。
muton

2019/01/16 04:09

回答ありがとうございます. #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> のヘッダをインクルードしたところ,エラーは消えました. しかし新たに 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー (アクティブ) E0165 関数呼び出しの引数が少なすぎます Project5 C:\Users\owner\source\repos\Project5\Project5\Source.cpp 9 エラー (アクティブ) E0167 型 "int" の引数は型 "HWND" のパラメーターと互換性がありません Project5 C:\Users\owner\source\repos\Project5\Project5\Source.cpp 9 の様なエラーが出てしまいました. 何度も大変申し訳ないのですが,対策などはありますでしょうか. 宜しくお願い致します.
Bull

2019/01/16 04:42

コンソールアプリケーションなら、ウィンドウハンドルは NULL でもいいです。けれどもその場合、四番目の引数にタイマー関数のアドレスを指定しなければなりません。 さらに余計なことですけど、コンソールアプリケーションでもメッセージループは必要になります。
guest

0

c++ですと、C言語との互換性のために残されているにすぎないマクロのNULLよりは、nullptrを使った方が良いと思います。
c++としてコンパイルした場合、NULLは通常0に展開されますが(C言語としてコンパイルした場合は(必ずではないですが)((void*)0) が多い)、これはint型ですのでポインター型とサイズが異なる処理系ではうまくいかないかもしれません。関数の実引数では関数のプロトタイプがあるのでこの質問の場合は問題ありませんが、NULLを使う癖があるのはお勧めできないです。
ググるとNULLを使うコードが多いのが疑問です。

投稿2019/01/17 09:56

編集2019/01/17 11:15
myoon

総合スコア100

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

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

0

Win32APIのタイマーをコンソールアプリケーションで使うならこんな感じかと。

cpp

1#include <iostream> 2#include <Windows.h> 3 4VOID CALLBACK TimerProc(HWND, UINT, UINT_PTR, DWORD) 5{ 6 std::cout << "kotai" << std::endl; 7} 8 9int main() 10{ 11 SetTimer(NULL, 0, 1000, TimerProc); 12 13 MSG Msg; 14 while (GetMessage(&Msg, NULL, 0, 0)) { 15 DispatchMessage(&Msg); 16 } 17 18 return 0; 19} 20

ただ、終わる手段が無いですが(^_^;)

投稿2019/01/16 05:53

takabosoft

総合スコア8356

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問