0

私は構造物で遊び始めました、私は私が呼んだものを作成しましたLR

struct LR{
    int v;
    LR* L;
    LR* R;
};

私はそれを一般的な方法で操作する方法を理解しています-main以下のコード、クラスの構築を開始する前に、文字列( "LRLRR")の形式でLRのノードの「アドレス」を取得して返す再帰関数を書き始めましたLRが必要ですが、コンパイラからエラーが発生します:

LR.cpp In function 'LR chooseNode(LR*, std::string)':    
LR.cpp [Error] request for member 'L' in 'tree', which is of pointer type 'LR*'   

(maybe you meant to use '->' ?)-一部再帰を伴う行のエラーchooseNode(*tree.L,str2);

私は何を間違っているのですか、それともそれをデバッグする方法ですか?(かなり練習である私の実装の全体の概念を除いて)。

#include<iostream>
#include<string>
#define SHOW(a) std::cout << #a << ": " << (a) << std::endl
using namespace std;
struct LR{
    int v;
    LR* L;
    LR* R;
};

LR chooseNode(LR* tree, string str){// for example str="LRL"    

            // for clarity I've cutted the most of the code

            if(str[0]=='L')
            chooseNode(*tree.L,str2);   
        else if(str[0]=='R')
            chooseNode(*tree.R,str2);

};


int main(){

    LR d1,d2,d3;
    d1.v=4; 
    d1.L=&d2;
    (*(d1.L)).L=&d3;
    d3.v=12345;
    SHOW((*(*d1.L).L).v);


    cout<<"Opis: "<<"\n";
    SHOW(int(&d1));
    SHOW(int(&d2));
    SHOW(sizeof(d2.v));

    return (0);
}
4

2 に答える 2

1

@Qbik-文字列の処理と効率について考えるようになり、最終的にはこれを共有することもできます。

LR* chooseNodeUsingCString(LR* tree, const char* str){// for example str="LRL"
    // Pre-conditions
    if ((str[0] == 0) || (tree == 0))
        return 0; // or assert or whatever

    // This assumes an L unless an R, but handle however if needed.
    LR* next = tree->L;
    if (str[0]=='R')
        next = tree->R;

    // End of path case
    if (str[1] == 0)
    {
        return next;
    }

    // Error case, path string does not exist in the tree.
    if (!next)
        return 0;

    // Standard recurse case; easy iteration with no copying along a C-String.
    const char* pathStringWithFirstElementRemoved = str + 1;
    return chooseNodeUsingCString(next, pathStringWithFirstElementRemoved);
};
于 2013-03-04T00:52:55.740 に答える
1

私は何を間違っていますか?

tree型のポインタですLR*

ポインターから構造体メンバーにアクセスするには、次の構文を使用します。

tree->L

または(あまり一般的ではありませんが、あなたが試みていたように見えます)

(*tree).L

むしろそれをデバッグする方法は?

「デバッグ」は、正常にビルドされた実行可能ファイルに対して実行されるプロセスです。コンパイル エラーがあるため、デバッグは適用されません。

于 2013-03-03T23:58:18.120 に答える