Tôi có hai lớp công khai; một tĩnh (DesktopOps
), một tĩnh (Args
), và tôi đang cố khởi tạo các biến tĩnh của lớp tĩnh trong chính.ID hợp lệ trong khai báo trước mã thông báo '='
Thông báo lỗi tôi tiếp tục nhận được là:
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);
^
Dưới đây là một 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);
}
Tôi cảm thấy như một thằng ngốc vì không biết rằng tĩnh phải được khai báo trên toàn cầu (tất cả các thành viên khác sẽ thấy nó như thế nào, doy), nhưng biến nào không có ý nghĩa? (Tôi đã xóa rất nhiều mã trung gian btw) – tetris11
Tôi có nghĩa là phải khai báo biến toàn cầu Args bằng cách sử dụng ctor mặc định chỉ để sử dụng các thành viên trong static window_coords và khởi tạo window_dims chỉ sửa lỗi biên dịch của bạn nhưng là một cách rất xấu xí để làm điều đó. ... Tôi rất chắc chắn bạn sẽ sắp xếp mã của mình tốt hơn. – jpo38
cũng ... đây là điều, Arg acually mất như '(int argc, char arv ***)' làm đối số, do đó, nó cần phải được trong chính .... nhưng tôi sẽ tìm một cái gì đó ra – tetris11