nonstatic member reference must be relative to a specific object

0

Hej,

Mała pomoc potrzebna. Błąd jak w temacie. Kod wygląda w uproszczeniu tak:

CIFCAddress m_3G_IfcAddress;
CIFCAddress m_S3G_IfcAddress;
bool sendBreExtMsg(const bool isS3G, bool specialAddress = 0, CIFCAddress & address = m_S3G_IfcAddress)      //tu wywala errora
{
address = m_3G_IfcAddress;
}

Możecie mi coś podpowiedzieć? Dzięki z góry!
Mal

0

domyślna wartość referencji jest niedookreślona. m_S3G_IfcAddress jest polem klasy, więc do pełnego adresu brakuje ci obiektu , w którym ma być te pole.
Najprościej wywal wartość domyślną.

0

w tej funkcji próbujesz przypisać coś do referencji co jest oczywiście nie możliwe. Referencje można tylko inicjalizować zrobiłaś to już poprzez argumenty domniemane funkcji.

0

Dzięki piękne za pomoc.
Dlaczego m_S3G_IfcAddress jest polem klasy? Obiektem jest właśnie mi się wydaje. Klasa jest zdefiniowana gdzie indziej.
Wartości domyślnej niestety nie mogę wywalić (to większy projekt). Nie mogę też zmienić wartości zwracanej. Za to potrzebuję, żeby mi klasa zmieniła wartość obiektu typu IFCAddress. Jak to zrobić jak nie właśnie przez przekazanie przez referencję?

2

m_S3G_IfcAddress jest niestatycznym polem klasy, a przynajmniej tak twierdzi kompilator.
W każdym razie można to rozwiązać przez przeładowanie metody zamiast stosować argument domyślny:

/*
Foo foo; // to nie jest pole klasy tylko zmienna globalna, można użyć jako parametr domyślny np. "void Bar(Foo & f = foo)"
*/

class JakasKlasa {
/*
    static Foo foo; // to jest statyczne pole klasy, można użyć jako parametr domyślny
*/
    CIFCAddress m_3G_IfcAddress;
    CIFCAddress m_S3G_IfcAddress; // a to już jest niestatyczne pole klasy, można użyć jako parametr domyślny, ale trzeba podać obiekt którego pole chcemy użyć np.
//     bool sendBreExtMsg(..., CIFCAddress & address = jakis_obiekt->m_S3G_IfcAddress)
// Jeśli damy samo "m_S3G_IfcAddress" to nie jest to rozumiane jako "this->m_S3G_IfcAddress" bo parametry metody są "tworzone" zanim sama metoda zostanie wywołana czyli zanim zaistnieje takie coś jak "this" np.
//     class Example {
//         void Test(Example *example = this); // źle, jeszcze nie można użyć "this", dopiero wewnątrz metody
//     }


    bool sendBreExtMsg(const bool isS3G, bool specialAddress, CIFCAddress & address)
    {
        /* ... */
    }

    bool sendBreExtMsg(const bool isS3G, bool specialAddress = 0)
    {
        this->sendBreExtMsg(isS3G, specialAddress, this->m_S3G_IfcAddress);
    }
}
0

Dziękuję!

1 użytkowników online, w tym zalogowanych: 0, gości: 1