Mã của tôi là rất lớn, nhưng tôi sẽ cố gắng giảm thiểu nó ở đây là tốt nhất có thể.Tại sao biến số tĩnh xác định trên toàn cầu được đặt lại?
Về cơ bản, tôi muốn xác định chuỗi được sửa đổi chỉ trong một địa điểm (chính của tôi) và sau đó được đọc trong toàn bộ chương trình của tôi.
Định nghĩa của tôi.h được bao gồm ở mọi nơi để tôi xác định.
static std::string MAINLOG = "RANDOMNES";
Trong chức năng chính của tôi, tôi làm:
for (int i = 0; i < files.size(); i++){
// Do stuff
prepDbugDir(); // This sets MAINLOG to "CORRECT_VALUE"
std::cout << "Before " << MAINLOG << std::endl;
// Call a class function whose includes include my defines.h
std::cout << "After " << MAINLOG << std::endl;
}
Và in ra của tập tin của tôi là
Before CORRECT_VALUE
RANDOMNESS
After CORRECT_VALUE
Vì vậy, câu hỏi của tôi là lý do tại sao và làm thế nào tôi có thể nhận được giá trị là được duy trì bên trong lớp học của tôi.
Bạn đã chia nhỏ thông tin chương trình của mình một số * .a hoặc * .o? có vẻ như là do bạn chia chương trình thành nhiều tệp đối tượng, có một số bản sao của MAINLOG tồn tại. –
Khi biên dịch, có. Nếu đó là vấn đề, có cách nào xung quanh vấn đề này không? – aarelovich
Thử đặt khai báo MAINLOG trong tiêu đề và định nghĩa chỉ một lần trong một tệp .cpp đơn bao gồm tiêu đề (có lẽ là define.cpp). – Baldrick