2012-05-06 18 views
0

C++でCスタイルの文字列を扱う際に問題があります。要するに、私がやろうとしているのは、メインメソッドのCStringを自分のオブジェクトのコンストラクタに渡すことです。 mainメソッドに続いC++引数としてCスタイルの文字列を渡す

class sample 
{ 
    public: // Initalization 
    Sample(const char * inFile); 
}//End sample class 

例えば

。私は第2のポインタデリファレンスargv[1]を使用した場合

//Main method 
int main (int argc, const char * argv[]) 
{ 
    Sample aSample(argv[1]); 
} 

さて、私の仮定に基づいて、私はconst char*を取り戻すべきです。私の理解から、char *argv[]は、**argvという文字の別の方法です。

また、const char *は "このポインタはconst charを指しています"と言っています。const char const *は "このポインタアドレスは変更できません。ポインタが指すアドレスはconstです同じように"。

更新 -

これを明確にすることは、2つの部分の質問です。

  1. サンプルのコンストラクタがcstringを渡すのに間違っている場合、どうすれば修正できますか?その上で、私の間違った文を更新しました

のconstの

  • 理解が、私はそれを「第二」されている必要があるときに「最初の」ポインタを間接参照しました。それを指摘して下さってありがとうございます。

    2アップデート - Iは、コマンドラインおよびargvから情報を受信して​​いたので、私は、[1]のargvを使用している[0]私は興味がない実行可能ファイルのパスのみを保持

    何か助けていただければ幸いです。

    -Freddy

  • +0

    エラーが表示されますか? –

    +0

    はい、コールしようとしているコンストラクタのシンボルが定義されていないというエラーが表示されます。 「シンプル:: Simpleは(char型のconst *)、から参照:unit.o に _Main 私はCONSTの私の理解について尋ねた理由厥は正しかった、私は私の議論のインタフェースが間違っていたかもしれ思っ – Freddy

    +0

    。あなたがそれを宣言しましたが、定義されていませんでした。 –

    答えて

    3

    argv[1]第2のポインタではなく、最初の間接参照。 argv[0]が必要です。 C++の配列は0ベースのです。また

    const char const * 
    

    は法的(それを指摘してベンジャミンにクレジット)ではありません。この場合、constは両方ともcharに適用されます。

    質問1)AのCStringは、コンストラクタのパラメータとしてchar*を取ることができますので、それが必要:あなたはポインタがconstのようにしたい場合は、EDIT

    char const * const 
    

    または

    const char * const 
    

    が必要作業。

    質問2)constは、左に何もない限り、左に結合します。従ってconst charchar constは同じです。 constポインタの場合、* constが必要であり、const *ではありません。

    +2

    * "argv [1]は最初のポインタを参照し、2番目のポインタは参照しません" * - それは後方にありませんか?また、 'const char const * 'は冗長です。 –

    +0

    @BenjaminLindley right :)そうです、私はそれが冗長であることを知っています。 –

    +0

    ルーシアンがポインタの情報を修正してくれてありがとう。しかし、C++ではargv [0]では実行可能ファイルへのパスがありませんか?私の主力では、もし私がargv [1]を印刷すると、コマンドラインで渡された正しい情報が表示されています。 – Freddy

    関連する問題