none
名前空間 namespace の追加方法について RRS feed

  • 質問

  • 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
    で使い回したものが原版ですが、そちらは問題ありません。


    2008年9月17日 17:27

回答

  •  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のクラスを使い始めると、移植性が悪くなると予想されます。

    他のコンパイラでもコードを使う可能性があるなら、本当に大丈夫かどうか検討して下さい。

    2008年9月17日 22:42
    モデレータ
  • 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 のみでと考えます。本番に使うようなテスト用コードを書く場合にはご指摘
    を忘れず、自分なりの指針を決めておくことに致します。

    的確なご返答に改めて感謝申し上げます。

    2008年9月18日 10:07

すべての返信

  •  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のクラスを使い始めると、移植性が悪くなると予想されます。

    他のコンパイラでもコードを使う可能性があるなら、本当に大丈夫かどうか検討して下さい。

    2008年9月17日 22:42
    モデレータ
  • 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 のみでと考えます。本番に使うようなテスト用コードを書く場合にはご指摘
    を忘れず、自分なりの指針を決めておくことに致します。

    的確なご返答に改めて感謝申し上げます。

    2008年9月18日 10:07