2012-03-14 7 views
0

文字列をパラメータとするpublic関数を使用してクラスポインタを返そうとしています。私はそれがどのように行われたのか(正しい方法)は分かりません。これは、私が持っているものです:C++のpublic関数を使用してクラスポインタを返します

Room::Room* getPointer(const string &nameOfRoom){  
    return &Room(); 
} 

私はこの構造体を使用する場合、正しいポインタまたは私の関数が作成している新しいインスタンスへのポインタを返していますか?
ありがとうございます

申し訳ありませんが私の意図については非常に明確ではないの皆さん。私は部屋の中に他の部屋へのポインタのリストを持っています。私の意見では、グラフのように見えるはずです。私は、リスト内のポインタを使ってグラフを「ナビゲート」する文字を持っています。私は文字列の形でユーザーの入力を取得しています。私のユーザが "ベッドルームに移動"と言う場合、私は何とか私のリストのベッドルームを指しているポインタを取得できるように、関数にパラメータとして "ベッドルーム"を渡したいと思います。
私はそれを正しく説明しているかどうか分からないので、「新しさ」と以前の説明の欠如を許してください。
ありがとう

+2

あなたのやりたいことははっきりしません。返されたポインタが指し示したいものは何ですか? –

+1

@OliCharlesworth、意図は明確ではありませんが、コードは明らかに間違っています.... –

+0

続きからhttp://stackoverflow.com/questions/9711455/create-a-pointer-inside-a-constructor-to-point -class-in-the-class-in-c/9711478#9711478 – EdChum

答えて

1

いいえ、間違いがあります。ほとんどのコンパイラは、これについて警告する必要があります。私は意図したセマンティクスがあなたの機能にどのようなものかはっきりしていないので、あなたはそれについて非常に明確ではないが、それは非常に間違いではない。

+0

最初から明確でないことを申し訳ありません。私は「正しい」説明でテキストを修正しました。 – Adrian

3

ポインタをオブジェクトに戻そうとしている場合は、そのようにします。

Room* getP(const std::string& sfasd) 
{ 
    return this; 
} 

しかし、それはより良い意味的にこれを行うために:あなたはあなたができる新しい部屋を作成することでしたどのような意味ならば、最終的

Room r; 
Room *rp=&r; 

Room& getP(const std::string& sfasd) 
{ 
    return *this; 
} 

をまた、あなたは常にこの操作を行うことができます

Room& getP(const std::string& name) 
{ 
    return new Room(name); 
} 

::://else where 
std::unique_ptr<Room> room_pointer(getP("hi")); 
+0

申し訳ありませんが、私のコンパイラは、あなたが提供した最初の2つのソリューションに対して 'Error: 'これは非静的メンバー関数の中でのみ使用できる'と警告しています。ありがとう – Adrian

+0

まあ、はい;これらは明らかにクラス本体の内部に記述されたメンバー関数であると考えられます。あなたはその言語についてどれだけ勉強しましたか? –

+0

@KarlKnechtel:私の方法は、私の講師がクラス外に書くべきだと言ったので、クラス本体の外に書かれました。あなたのクラスが非常に長い場合、コンパイラは混乱し、有線の問題があると予想されるはずです。私のためにそれを指摘してくれてありがとう。 – Adrian

0

あなたが何をしようとしているのか明確ではありません。 まず、関数がポインタを無効にすると無効になるので、まず関数はスタックベースの変数のアドレスを返します。

そして、あなたは文字列を渡してスタックスペースを無駄にしています....それを使用しないでください。マイクロソフトコンパイラを使用している場合、レベル4の警告をオンにすることができます(デフォルトではオンにならない)それについての警告。あなたが部屋の新しいインスタンスを作成したい場合は

は、単に次の操作を行います。

Room* Room::getPointer() 
{ 
    return new Room(); 
} 

だから、再び、私はあなたが何をしたいか分からないので、私はこの点だけで推測することができます。

+0

スタックスペースを無駄にしていると言いました。 。 – Adrian

+0

@Adrian:それはスタックスペースの浪費以上のもので、たぶんバグでしょう。なぜ 'nameOfRoom'が使われていないのですか? – MSalters

関連する問題