У меня есть два открытых класса; один статический (DesktopOps
) один нестатический (Args
), и я пытаюсь инициализировать статические переменные статического класса в main.
Я получаю сообщение об ошибке:
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);
^
Вот 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);
}
Я не очень понимаю, что вы пытаетесь сделать …. но статические переменные должны быть созданы в глобальной области видимости, вне основной функции:
Args arg;
Point DesktopOps::window_coords = Point(arg.topleft_x, arg.topleft_y);
Point DesktopOps::window_dims = Point(arg.width, arg.height);
int main(){
}
Но эта глобальная переменная Args не имеет смысла ….
В структуре вы объявлять переменные-члены, но когда вы определять их вы не можете сделать это в функции, это должно быть сделано в глобальной области, например,
struct DesktopOps {
static Point window_coords;
static Point window_dims;
};
Point DesktopOps::window_coords = Point(someX, someY);
Point DesktopOps::window_dims = Point(someW, someH);
int main()
{
// ...
}
К сожалению это не может быть сделано, так как инициализация зависит от локального arg
переменная в main
функция. Это означает, что вы должны выполнить определение и инициализацию в два этапа:
struct DesktopOps {
static Point window_coords;
static Point window_dims;
};
Point DesktopOps::window_coords;
Point DesktopOps::window_dims;
int main()
{
Args arg;
DesktopOps::window_coords = Point(arg.topleft_x, arg.topleft_y);
DesktopOps::window_dims = Point(arg.width, arg.height);
}