Mam dwie klasy publiczne; jeden statyczny (DesktopOps
), jeden niestatyczny (Args
) i próbuję zainicjować statyczne zmienne klasy statycznej w main.Kwalifikowany identyfikator w deklaracji przed tokenem = = '
Komunikat o błędzie wciąż otrzymuję to:
main.cpp:25: error: qualified-id in declaration before '=' token
Point DesktopOps::window_coords = Point(arg.topleft_x, arg.topleft_y);
^
main.cpp:26: error: qualified-id in declaration before '=' token
Point DesktopOps::window_dims = Point(arg.width, arg.height);
^
Oto MWE:
#include <opencv2/opencv.hpp>
using namespace cv;
struct Args{
int topleft_x, topleft_y, width, height;
Args(){
topleft_x = topleft_y = width = height = -1;
}
};
struct DesktopOps {
static Point window_coords;
static Point window_dims;
};
int main(){
Args arg();
Point DesktopOps::window_coords = Point(arg.topleft_x, arg.topleft_y);
Point DesktopOps::window_dims = Point(arg.width, arg.height);
}
Czuję się jak idiota, bo nie wiem, że statyczny musi być zadeklarowany globalnie (jak inaczej wszyscy to zobaczą, doy), ale jaka zmienna nie ma sensu? (Usunąłem dużo kodu pośredniego btw) – tetris11
Mam na myśli to, że konieczność zadeklarowania globalnej zmiennej Args przy użyciu domyślnego ctor'a tylko po to, aby użyć członków w statycznych instrukcjach window_coords i initial_dims, tylko naprawia twój błąd kompilacji, ale jest bardzo brzydkim sposobem na to. ... Jestem pewna, że lepiej uporządkujesz swój kod. – jpo38
cóż ... o to chodzi, Arg przyjmuje jako argumenty "(int argc, char arv ***)", więc musi być w zasięgu ... ale coś wymyślę – tetris11