Tôi có một lớp không có hàm tạo mặc định hoặc toán tử gán để nó được khai báo và khởi tạo trong câu lệnh if/else tùy thuộc vào kết quả của hàm khác. Nhưng sau đó nó nói rằng nó nằm ngoài phạm vi mặc dù cả hai tuyến của điều kiện sẽ tạo ra một thể hiện.Phạm vi của các biến trong câu lệnh
Hãy xem xét ví dụ sau (thực hiện với int
chỉ để minh họa cho điểm):
#include <iostream>
int main()
{
if(1) {
int i = 5;
} else {
int i = 0;
}
std::cout << i << std::endl;
return 0;
}
Đừng biến khai báo trong một đi có điều kiện ra khỏi phạm vi ở phần cuối của các điều kiện? Cách chính xác để xử lý tình huống mà không có hàm tạo mặc định là gì nhưng các đối số cho hàm tạo phụ thuộc vào một số điều kiện nhất định?
Sửa
Trong ánh sáng của những câu trả lời được đưa ra, tình hình phức tạp hơn như vậy có lẽ phương pháp này sẽ phải thay đổi. Có một lớp cơ sở trừu tượng A và hai lớp B và C có nguồn gốc từ A. Làm thế nào sẽ như thế này:
if(condition) {
B obj(args);
} else {
C obj(args);
}
thay đổi cách tiếp cận? Vì A là trừu tượng, tôi không thể chỉ khai báo A* obj
và tạo kiểu thích hợp với new
.
Kế thừa của bạn là ảo hay tĩnh? – Dani
Ảo, tôi nghĩ vậy. 'class A' có một hàm ảo, nếu đó là ý của bạn (C++ không phải là phù hợp mạnh mẽ của tôi, tôi làm việc chủ yếu ở Fortran) – tpg2114
Bạn thực sự có thể khai báo một con trỏ tới một lớp trừu tượng - tôi đã chỉnh sửa câu trả lời của mình. –