代码之家  ›  专栏  ›  技术社区  ›  Daniel Ryan

从方法修改指针字段

  •  1
  • Daniel Ryan  · 技术社区  · 6 年前

    我试图修改一个方法中的bool字段。该方法接受一个指针bool,但似乎无法找到正确的方法。

    这是我想做的类似事情的一个基本示例:

    class WarningManager {
        bool seenWarningA; 
    
        void updateWarnings() {
            pushWarning(&seenWarningA)
        }
    
        void pushWarning(bool ** warning) {
            **warning = true;
        }
    } 
    

    这个代码示例出错(发送bool*,但必须是bool**),我尝试过其他方法,但没有成功。找不到任何在线示例,但可能我正在搜索错误的术语。正确的方法是什么?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Pete Becker    6 年前

    因为您有一个类,所以不需要参数。

    class WarningManager {
    bool seenWarningA; 
    
    void updateWarnings() {
        pushWarning()
    }
    
    void pushWarning() {
        seenWarningA = true;
    }
    } 
    

    class WarningManager {
    bool seenWarningA; 
    
    void updateWarnings() {
        pushWarning(seenWarningA)
    }
    
    void pushWarning(bool & warning) {
        warning = true;
    }
    }
    

    如果要使用指针,&运算符只提供单指针而不是双指针:

    class WarningManager {
    bool seenWarningA; 
    
    void updateWarnings() {
        pushWarning(&seenWarningA)
    }
    
    void pushWarning(bool * warning) {
        *warning = true;
    }
    } 
    
        2
  •  1
  •   Charlim    6 年前

    您似乎试图将bool*的参数传递到接受bool**的函数中。从参数列表中删除一个间接层,或将一个添加到要传递的值中。两个都可以。

        3
  •  1
  •   Coral Kashri    6 年前

    两个错误:

    首先-你的声明 pushWarning 参数类型为 bool** ,而您正试图发送 bool* .

    第二,你可以简单的引用:

    using namespace std;
    
    class WarningManager {
    public:
        bool seenWarningA;
    
        void updateWarnings() {
            pushWarning(seenWarningA);
        }
    
        void pushWarning(bool &warning) { // You can simply use refference instead of pointer to pointer, or pointer at all..
            warning = true;
        }
    };
    
    int main()
    {
        WarningManager w;
        w.seenWarningA = false;
        w.updateWarnings();
        cout << w.seenWarningA; // Prints 1
    
        return 0;
    }