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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

Q&A

解決済

2回答

21377閲覧

error c2061:構文エラーで困っています。

k_noriyuki

総合スコア7

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

0グッド

1クリップ

投稿2016/10/13 14:02

編集2016/10/14 04:02

###前提・実現したいこと

近藤科学のロボット向けサーボモータを動かそうとしています。
調べているとKRSシリーズ向けのライブラリがあるのでそれを使ってみようとしたのですが

error c2061:構文エラー:識別子’TCommand’

と出るのですが

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

error c2061:構文エラー:識別子’TCommand’ ファイル:krslib.h 行:108

文字数が1000文字を超えてしまいますのでドライブに置きました。
よろしくお願いします。

ソース

###試したこと

使用環境はvisualStudio2013です。
ライブラリのパスや環境変数などは通して使用しています。

どうかご教授ください。
よろしくお願いします。

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

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

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

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

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

yohhoy

2016/10/14 00:36

#include <stdint.h>が2つあったり108行目がKRS_SetTimeOutOffsetでなかったりLoadDLL関数の閉じ}が無いなど、質問文にあるソースコードは対象そのものでしょうか?(改変していませんか?)
k_noriyuki

2016/10/14 04:02

teratailの質問フォームの文字数制限が1000文字までですべて貼り付ける事が出来ませんでした。すいません。オリジナルのソース一を置いたリンクを張りますので見ていただければありがたいです。
guest

回答2

0

ベストアンサー

こんにちは。

他に下記警告がでました。

krslib.h : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。

これが原因です。typedef ... TCommand;直前の//コマンドコメントの日本語がおかしな具合に解釈されてtypedef ... TCommand;が無かったこと(コメントの続きになっている)にされてます。

krslib.hはBOM無しのUTF-8で保存されています。しかし、Visual StudioはBOMがない場合、Shift-JISで記述されいるとして処理するため、不整合が生じるのです。

適切に処理するためにはBOM付UTF-8で保存すればよいです。
Visual Studioのファイル(F)→開く→ファイルで開き、ファイル(F)→名前を付けてkrslib.hを保存を選択後、上書き保存のボタンの右にある▼を押してエンコード付で保存を押します。
エンコード(E):に「Unicode (UTF-8シグネシャあり) - コードページ65001」を選択、
行の終わり(L):に「Windows(CR LF)」を選択して保存すれば、大丈夫になる筈です。

他のC4819警告がでるファイルについても同じ処理をしておくと安心です。

投稿2016/10/14 04:46

編集2016/10/14 04:46
Chironian

総合スコア23272

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

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

k_noriyuki

2016/10/14 06:27

Chironianさん本当にありがとうございます。 上記の通りに試してみたら解決しました。 文字コードの違いでこのようなことになるんですね、勉強になりました。 本当にありがとうございました。
guest

0

Visual Studio でコンパイルしているのであれば、

// コマンド typedef enum {CMD_WRITE_POS = 4, CMD_READ_PARAM = 5, CMD_WRITW_PARAM = 6, CMD_ID = 7} TCommand;

の部分を、

// コマンド enum TCommand {CMD_WRITE_POS = 4, CMD_READ_PARAM = 5, CMD_WRITW_PARAM = 6, CMD_ID = 7};

と書き換えてみては、どうでしょうか?

投稿2016/10/13 14:11

編集2016/10/13 14:13
ShinyaAnan

総合スコア241

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

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

k_noriyuki

2016/10/13 14:17

今試してみましたが同じエラーが出てしまいます>< エラーがあるって言われている108行目がTCommandに関係なさそうな関数から出てることもあって自分にはお手上げって感じなんです>< 108行目 void KRSAPIDLL KRS_SetTimeOutOffset (TDeviceID dvid, uint32_t t);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問