トップ回答者
名前空間 namespace の追加方法について

質問
-
VS2008 standard で C++ のターミナルアプリケーションを作成しようと project を作成しました。
Math.Abs() を使いたいと思い
using System;
を宣言したところ
error C2871: 'System' : この名前を指定された名前空間は存在しません。
と出たのでエラー番号から検索しましたが、具体的に VS2008 から何を追加してやれば良い
のか調べきれませんでした。
...
#include <complex>
...
using std;
using System;
...
int ConvergenceTest_A(complex<double> z){
double re,im,temp;
int value = 0;
re = z.real();
im = z.imag();
temp = sqrt(pow(re,2.0) + pow(im,2.0));
if(temp < LIMIT_A && abs(z.real()) < LIMIT_A){
value = TRUE;
...
}
abs(z.real()) を Math.Abs にしたいために using System; を宣言したので
すが、http://homepage3.nifty.com/ishidate/vcpp08_8/vcpp08_8.htm を参考
にしようとしたら、CLRコンソールアプリケーションで project を作成した
当初は問題ないものの、サンプルソースを写すと文字コードエラーだらけ
になります。他エディターから確認してもページのソースも
charset=Shift_JIS で System , std とも using されています。ギブアップで
す。私はどこまで来たのでしょう。よろしくお願いいたします。
尚、VC++ .Net 2003 で書いたものを 2008 に写しています。g++ とか CC
で使い回したものが原版ですが、そちらは問題ありません。
回答
-
gettext さんからの引用 Math.Abs() を使いたいと思い
using System;
を宣言したところ
error C2871: 'System' : この名前を指定された名前空間は存在しません。using namespace Systemですよね?
であれば、プロジェクトのプロパティにて「共通言語ランタイム サポート」という項目を「共通言語ランタイム サポート (/clr)」に設定して下さい。
なお、このオプションを有効にすると、.NET Frameworkが必要なアプリケーションになること、C++/CLIと呼ばれるC++ベースの独自の言語に変わることを理解しておいて下さい。
(純粋なC++アプリケーションとは言えなくなる)
(参考)
単なるWin32コンソールアプリケーションからは.NET Frameworkのクラスを使うことができません。
この共通言語ランタイム(CLR)のサポートを追加することで、CLRコンソールアプリケーションに近づき、.NET Frameworkのクラスを使うことができるようになります。
gettext さんからの引用 abs(z.real()) を Math.Abs にしたいために using System; を宣言したので
すが、http://homepage3.nifty.com/ishidate/vcpp08_8/vcpp08_8.htm を参考
にしようとしたら、CLRコンソールアプリケーションで project を作成した
当初は問題ないものの、サンプルソースを写すと文字コードエラーだらけ
になります。他エディターから確認してもページのソースも
charset=Shift_JIS で System , std とも using されています。ギブアップで
す。ブラウザで読める時点でShiftJISとか、EUCとか、Unicodeはあまり気にする必要がありません。
コンパイラで文字コード云々のエラーが出るときは、大抵は全角スペースが混じっていることが原因です。
実際、提示されたサイトのサンプルの左側のスペースは全角スペースですので、そのあたりはタブや半角スペースに置き換える必要があるはずです。
gettext さんからの引用 尚、VC++ .Net 2003 で書いたものを 2008 に写しています。g++ とか CC
で使い回したものが原版ですが、そちらは問題ありません。Math.Absを初めとする.NET Frameworkのクラスを使い始めると、移植性が悪くなると予想されます。
他のコンパイラでもコードを使う可能性があるなら、本当に大丈夫かどうか検討して下さい。
-
Azulean さん
gettext です。ご返答有り難うございます。
Azulean さんからの引用 gettext さんからの引用 Math.Abs() を使いたいと思い
using System;
を宣言したところ
error C2871: 'System' : この名前を指定された名前空間は存在しません。using namespace Systemですよね?
であれば、プロジェクトのプロパティにて「共通言語ランタイム サポート」という項目を「共通言語ランタイム サポート (/clr)」に設定して下さい。
なお、このオプションを有効にすると、.NET Frameworkが必要なアプリケーションになること、C++/CLIと呼ばれるC++ベースの独自の言語に変わることを理解しておいて下さい。
(純粋なC++アプリケーションとは言えなくなる)
ご説明頂いた内容を踏まえ、今一度ソースを見直してからリビルドしました。問題無くビルド , リンクされました。
ご指摘頂いた .NET Framework の件ですが、これも今一度調べ直しています。
もし、.NET Framework の機能代替が効かない箇所があれば、自前でいずれかのクラスから派生させることにしま
す。ただ、便利そうなものがあれこれ準備されていますから Windows 上のみで使うツールを書く時に使いたいと
思います。道は長そうですが。
Azulean さんからの引用
実際、提示されたサイトのサンプルの左側のスペースは全角スペースですので、そのあたりはタブや半角スペースに置き換える必要があるはずです。
申し訳ありません。良く確認もせずに書いてしまいました。こちらでもテキストエディターで確認しました。私の
ミスです。ご容赦を。
Azulean さんからの引用 Math.Absを初めとする.NET Frameworkのクラスを使い始めると、移植性が悪くなると予想されます。
他のコンパイラでもコードを使う可能性があるなら、本当に大丈夫かどうか検討して下さい。
はい。あくまで VS2008 + Windows のみでと考えます。本番に使うようなテスト用コードを書く場合にはご指摘
を忘れず、自分なりの指針を決めておくことに致します。
的確なご返答に改めて感謝申し上げます。
すべての返信
-
gettext さんからの引用 Math.Abs() を使いたいと思い
using System;
を宣言したところ
error C2871: 'System' : この名前を指定された名前空間は存在しません。using namespace Systemですよね?
であれば、プロジェクトのプロパティにて「共通言語ランタイム サポート」という項目を「共通言語ランタイム サポート (/clr)」に設定して下さい。
なお、このオプションを有効にすると、.NET Frameworkが必要なアプリケーションになること、C++/CLIと呼ばれるC++ベースの独自の言語に変わることを理解しておいて下さい。
(純粋なC++アプリケーションとは言えなくなる)
(参考)
単なるWin32コンソールアプリケーションからは.NET Frameworkのクラスを使うことができません。
この共通言語ランタイム(CLR)のサポートを追加することで、CLRコンソールアプリケーションに近づき、.NET Frameworkのクラスを使うことができるようになります。
gettext さんからの引用 abs(z.real()) を Math.Abs にしたいために using System; を宣言したので
すが、http://homepage3.nifty.com/ishidate/vcpp08_8/vcpp08_8.htm を参考
にしようとしたら、CLRコンソールアプリケーションで project を作成した
当初は問題ないものの、サンプルソースを写すと文字コードエラーだらけ
になります。他エディターから確認してもページのソースも
charset=Shift_JIS で System , std とも using されています。ギブアップで
す。ブラウザで読める時点でShiftJISとか、EUCとか、Unicodeはあまり気にする必要がありません。
コンパイラで文字コード云々のエラーが出るときは、大抵は全角スペースが混じっていることが原因です。
実際、提示されたサイトのサンプルの左側のスペースは全角スペースですので、そのあたりはタブや半角スペースに置き換える必要があるはずです。
gettext さんからの引用 尚、VC++ .Net 2003 で書いたものを 2008 に写しています。g++ とか CC
で使い回したものが原版ですが、そちらは問題ありません。Math.Absを初めとする.NET Frameworkのクラスを使い始めると、移植性が悪くなると予想されます。
他のコンパイラでもコードを使う可能性があるなら、本当に大丈夫かどうか検討して下さい。
-
Azulean さん
gettext です。ご返答有り難うございます。
Azulean さんからの引用 gettext さんからの引用 Math.Abs() を使いたいと思い
using System;
を宣言したところ
error C2871: 'System' : この名前を指定された名前空間は存在しません。using namespace Systemですよね?
であれば、プロジェクトのプロパティにて「共通言語ランタイム サポート」という項目を「共通言語ランタイム サポート (/clr)」に設定して下さい。
なお、このオプションを有効にすると、.NET Frameworkが必要なアプリケーションになること、C++/CLIと呼ばれるC++ベースの独自の言語に変わることを理解しておいて下さい。
(純粋なC++アプリケーションとは言えなくなる)
ご説明頂いた内容を踏まえ、今一度ソースを見直してからリビルドしました。問題無くビルド , リンクされました。
ご指摘頂いた .NET Framework の件ですが、これも今一度調べ直しています。
もし、.NET Framework の機能代替が効かない箇所があれば、自前でいずれかのクラスから派生させることにしま
す。ただ、便利そうなものがあれこれ準備されていますから Windows 上のみで使うツールを書く時に使いたいと
思います。道は長そうですが。
Azulean さんからの引用
実際、提示されたサイトのサンプルの左側のスペースは全角スペースですので、そのあたりはタブや半角スペースに置き換える必要があるはずです。
申し訳ありません。良く確認もせずに書いてしまいました。こちらでもテキストエディターで確認しました。私の
ミスです。ご容赦を。
Azulean さんからの引用 Math.Absを初めとする.NET Frameworkのクラスを使い始めると、移植性が悪くなると予想されます。
他のコンパイラでもコードを使う可能性があるなら、本当に大丈夫かどうか検討して下さい。
はい。あくまで VS2008 + Windows のみでと考えます。本番に使うようなテスト用コードを書く場合にはご指摘
を忘れず、自分なりの指針を決めておくことに致します。
的確なご返答に改めて感謝申し上げます。