Renesas Community
Search Community
User
Join or sign in
Site
Search Community
User
Renesas Engineering Community
FAQ
HELP
More
Cancel
Forums & Groups
English Community
中文社区(Chinese Community)
More
Cancel
かふぇルネ
forums-groups
Microcontrollers and Microprocessors
Other MCU/MPU Products
SH Family
More
Cancel
SH Family
SH Family Forum
C++で開発したい
Home
Forum
Tags
More
Cancel
New
Replies
8 replies
Subscribers
447 subscribers
Views
16977 views
Users
0 members are here
void
Neko
end
of
testcpp.hpp
token
testcpp2
beginner
Illegal
testcpp.cpp
Options
Share
More
Cancel
Related
C++で開発したい
f_hashi
over 10 years ago
プログラム言語としてC++で開発したいと考えています.
開発環境は
SH7269評価ボード,
μITRONOS:HI7000\,
HEW(Version 4.09.01.007)です.
ファイル:testcpp.hpp\,testcpp.cpp(C++で記述.以下記載例)をプロジェクトを追加しましたが,以下のエラーによりコンパイルができません.ご存知の方がいましたら,ご教示頂けないでしょうか.
[エラー]
C2500 (E) Illegal token \”Neko\”
C2500 (E) Illegal token \”{\”
[c++記載]
=以下 testcpp.hpp ==
class Neko
{
private:
int name;
public:
Neko();
void testcpp();
void testcpp2();
};
//(end of testcpp.hpp)
==以下testcpp.cpp==
#include \”testcpp.hpp\”
Neko::Neko(){}
void Neko::testcpp(){}
void Neko::testcpp2(){}
//(end of testcpp.cpp)
Kon Nozomu(すと)
over 10 years ago
f_hashiさん
私の環境ではf_hashiさんのサンプルでコンパイルエラーは発生しませんでした。
インクルードパスが通っていないのではないでしょうか?
特別なフォルダに格納しているのでしたら「ビルド」メニューの「SuperH RISC engine Standard Toolchain...」を開くと最初にインクルードファイルディレクトリについて表示されているので、こちらにパスを追加してください。
ご確認ください。
すと@embedded property
Cancel
Up
0
Down
Reply
Cancel
f_hashi
over 10 years ago
すとさん,f_hashiです.
ご教示ありがとうございます.
インクルードパスは通っていることを確認しました.
しかし,同じエラーによりコンパイルできませんでした.
Cancel
Up
0
Down
Reply
Cancel
Kon Nozomu(すと)
over 10 years ago
f_hashiさん
> C2500 (E) Illegal token \”Neko\”
が出ていることから\”Neko\”が定義されていない(字句として認識されていない)のがエラーの原因です。testcpp.cppを右クリックで単体コンパイルしても同じでしょうか?
インクルードが通っているのにIllegal tokenが出るのは??です。
試しに新規プロジェクトを作成してプロジェクトフォルダ直下に置いた上記2ファイルのみを登録、コンパイルしても状況は変わりませんか?
すと@embedded property
Cancel
Up
0
Down
Reply
Cancel
f_hashi
over 10 years ago
すとさん,f_hashiです.
>testcpp.cppを右クリックで単体コンパイルしても同じでしょうか?
HI7000上で動作している環境で単体コンパイルした結果,問題なくコンパイル出来ました.
>試しに新規プロジェクトを作成してプロジェクトフォルダ直下に置いた上記2ファイルのみを登録、コンパイルしても状況は変わりませんか?
新規プロジェクトを作成して,HI7000上で動作していない環境では,問題なくビルドできました.
しかし,HI7000上でtestcpp.hppをインクルードし,ビルドするとエラーが表示します.インクルードした状態のtask.cを以下に示します.
= task.c =
#include <machine.h>
#include \”itron.h\”
#include \”kernel.h\”
#include \”kernel_id.h\”
#include \”kernel_id_sys.h\”
//インクルードするとエラーがでます.
#include \”neko.hpp\”
void MainTask(VP_INT exinf);
void MainTask(VP_INT exinf)
{
ext_tsk();
}
Cancel
Up
0
Down
Reply
Cancel
Kon Nozomu(すと)
over 10 years ago
f_hashiさん
元のファイルが.cであるため、.hpp(cppの内容)をcコンパイラが解釈しようとしているためエラーとなっているのでしょう。
強制的にcppとして処理するようlangオプションを指定すると解決しませんか?
例
shc –lang=cpp test.c
もしくは、task.cをtask.cppに変更してコンパイルしてみてください。
ご確認ください。
すと@embedded property
Cancel
Up
0
Down
Reply
Cancel
f_hashi
over 10 years ago
すとさん
>強制的にcppとして処理するようlangオプションを指定すると解決しませんか?
>もしくは、task.cをtask.cppに変更してコンパイルしてみてください。
どちらも試してみましたが,「C2500 (E) Illegal token \”Neko\”」はでないものの,
以下のエラーが表示されました.
L2310 (E) Undefined external symbol \”_MainTask\” referenced in...
リンクエラーということで
C++ファイルをCで呼び出すにはということで調べた結果,
extern 宣言をすると呼び出せるということが
分かったので,以下の記述に変更しましたが,
エラーが解決しませんでした.
extern void MainTask(VP_INT exinf);
Cancel
Up
0
Down
Reply
Cancel
Kon Nozomu(すと)
over 10 years ago
f_hashiさん
こちらで宣言してもダメですか?
extern \”C\” void MainTask(VP_INT exinf);
すと@embedded property
Cancel
Up
0
Down
Reply
Cancel
f_hashi
over 10 years ago
すとさん
度重なるご教示大変ありがとうございました.
すとさんのご教示どおり,以下の記述をすることでエラーがなくなりました.
extern \”C\” void MainTask(VP_INT exinf);
加えて,cで記述したヘッダファイルを
#ifdef __cplusplus
extern \”C\” {
#endif /* __cplusplus */
(Cで記述)
#ifdef __cplusplus
}
#endif /* __cplusplus */
を付け加えることで,Cppファイル内でc関数を呼び出すことができ,問題なく,動作することができました.
Cancel
Up
0
Down
Reply
Cancel