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

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

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

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

Q&A

解決済

3回答

973閲覧

C++ Syntax Error @ msxml.h 1506行 の解決法について

oknd1

総合スコア17

C++

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

0グッド

0クリップ

投稿2017/10/30 03:54

編集2017/10/30 06:12

Visual Studio 2017 CommunityでC++のコードを書いています。
コンパイルしようとすると発生するエラー群

E0018 ')'が必要です msxml.h 1506行
C2143 構文エラー:')'が'定数'の前にありません。 msxml.h 1506行
C2143 構文エラー:')'が'定数'の前にありません。 msxml.h 1506行
C2059 構文エラー:'定数' msxml.h 1506行
C2059 構文エラー:')' msxml.h 1506行
C2238 ')'の前に無効なトークンがあります。 msxml.h 1506行

の解決法がわかりません。
自分のコードのインクルード部分は

#include <cmath> #include <cstdlib> #include< <ctime> #include <sstream> #include <fstream> #include <iostream> #include <string> #include <vector> #include <omp.h> #include <stdio.h> #include <Windows.h> #include <stdlib.h> #include "C:Users\ユーザー名\DxlibFile\Dxlib.h"

です。msxml.hは少なくとも明示的にはインクルードしていないのですが、インクルードファイルのどれかでインクルードしているのでしょうか。
解決法についてご意見いただければと思います。宜しくお願い致します。

###追記
実はコードを組んですぐはコンパイルできていたのですが、includeの順番を変えたりincludeしたヘッダの中に入っていたinclude文などをすべてソースの方にまとめて書いたりしてからこのようなエラーが生じるようになりました。そのときにプロパティの方も、触っていないはずですが、変えてしまった可能性はあります。

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

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

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

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

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

LouiS0616

2017/10/30 03:57

#include< <ctime> この部分が明らかにおかしいようですが。コピペミスでしょうか?
oknd1

2017/10/30 06:05

LouiS0616様 すみません。ctimeの部分は消し忘れですので無視してくださればと思います。
guest

回答3

0

msxml.hを覗いてみると、次のようにpiが使われている箇所がありました。

C++

11493: virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE createProcessingInstruction( 21494: /* [in] */ BSTR target, 31495: /* [in] */ BSTR data, 41496: /* [retval][out] */ IXMLDOMProcessingInstruction **pi) = 0;

適当にコードを書いて実験してみます。

C++

1#define pi 3.14 2 3class Hoge { 4 virtual void func(int pi) = 0; 5}; 6 7int main(void) { 8 return 0; 9}
1>Source.cpp(4): error C2143: syntax error: missing ')' before 'constant' 1>Source.cpp(4): error C2143: syntax error: missing ';' before 'constant' 1>Source.cpp(4): error C2059: syntax error: 'constant' 1>Source.cpp(4): error C2059: syntax error: ')' 1>Source.cpp(4): error C2238: unexpected token(s) preceding ';'

見事に同様のエラーが出ましたね。

回避するためには

次の三つでしょうか。

  • 別の名前を利用する

oknd1さんが自己解決されている方法です。
最もシンプルですが、名前が衝突しないかどうかは試行錯誤するしかないです。
↓ 別の名前が衝突してしまった例

C++

1#define text "hoge" 2#include <msxml.h> 3 4int main(void) { 5 return 0; 6}
error C2143: syntax error: missing ')' before 'string' error C2143: syntax error: missing ';' before 'string' error C2059: syntax error: 'string' error C2059: syntax error: ')' error C2238: unexpected token(s) preceding ';' ...
  • マクロではなくconstを使う

この方法なら問題なくビルド出来ます。
なお、ここでは先頭に書いていますが、習慣的にはプリプロセッサ文を上に書くかと思います。

C++

1static const float pi = 3.14f; 2#include <msxml.h> 3 4int main(void) { 5 return 0; 6}
  • _USE_MATH_DEFINESフラグを立てる

ライブラリ作成者がよほどドジを踏んでいない限り、名前の重複はないでしょう。

C++

1#define _USE_MATH_DEFINES 2#include <cmath> 3#include <msxml.h> 4 5#include <iostream> 6 7int main(void) { 8 std::cout << M_PI << std::endl; 9 return 0; 10}
3.14159

投稿2017/10/30 07:29

編集2017/10/30 07:33
LouiS0616

総合スコア35660

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

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

oknd1

2017/10/30 08:33

LouiS0616様 丁寧な御回答誠にありがとうございます。 今回は別の名前を利用する方法に致しましたが、他2つの回避方法も後学とさせていただきます。
guest

0

こんにちは。

インクルード部分を単純にコンソール・アプリにコピペしてVC++でビルドしてみました。
ctimeのタイプミスと思われるものを修正しても、msxml.h 云々なエラーはでません。dxlibは入れてないので、dxlib.hのところでファイル無しエラーになるだけです。

msxml.h はXMLを処理するためのヘッダですので、通常は直接インクルードするかXML関連の機能からインクルードされると思います。提示されていないソースのどこからかインクルードされているのではないでしょうか?
このようなケースでは、問題が再現する最小のソースを作って提示されると解決が速いです。(そのようなソースを作っている最中に問題が解決することも少なくないです。)

投稿2017/10/30 04:34

Chironian

総合スコア23272

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

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

oknd1

2017/10/30 06:13

Chironian様 ありがとうございます。質問の方にも追記したのですが、実は最初はコンパイルできていたのが、include文の場所や順番をいじったり、もしかするとプロパティをいじったりしてからこのような問題が生じるようになりました。これらは原因となりうるでしょうか?
guest

0

自己解決

皆様

解決いたしました。includeの前に

#define pi 3.14159265359

と書いていたのですが、これが問題だったらしくこのpiを適当に別の文字列に置き換えたところエラーなく通るようになりました。

ご回答いただきありがとうございました。

投稿2017/10/30 06:41

oknd1

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問