30/09/2018, 18:26

Lỗi expression must have a constant value

Chào các mem trong “gia đình”. Mình là newbie về C++ có thể nói mình chưa qua trường lớp nào nên tự mày mò là chính. Nhân đây có 1 số vấn đề nhờ mọi người giải dùm.

  1. Em có tự học C++ qua video của anh Lê Trần Đạt nên kiến thức không nhiều nên mong mọi người góp ý.

  2. Em đang mày mò về cái class trong C++ lên mạng tìm hiểu 1 số bài tập nhưng tới bài này nó có lỗi thế này mong mọi người TEST xem nhé:smile:

    #include
    #include

    using namespace std;

    class Nameoffamily
    {
    private:
    string name;
    string QH;
    int Birthday;

    public:

     void setData()
     {
     	cout << "Enter your name: ";
     	getline(cin, name);
     	fflush(stdin);
     	cout << "Enter you QH: ";
     	getline(cin, QH);
     	fflush(stdin);
     	cout << "Enter your birthday: ";
     	cin >> Birthday;
     }
     void getData()
     {
     	cout << "Your name: " << name << endl;
     	cout << "Your QH: " << QH << endl;
     	cout << "Your birthday: " << Birthday << endl;
    
     }
    

    };
    int main()
    {

     	int i;
     	cout << "Enter number of family: ";
     	cin >> i;
     	const int number = i;
    
     	Nameoffamily Thanhvien[number];
    
     	for (i = 0; i < number; i++)
     	{
     		cout << "No: " << i + 1 << "/" << number << endl;
     		Thanhvien[i].setData();
     		
     	}
     	cout << endl;
     	cout << "==OutPut==" << endl;
     	for (int i = 0; i < number; i++)
     		Thanhvien[i].getData();
    
     	return 0;
     }
    

Nó hiện lỗi là: expression must have a constant value. Mà em biết sơ sơ là hằng là 1 giá trị cố định nhưng sao mà em vẫn ko hiểu mấy chương trình mạng nó có kết quả nhưng em lại thử chạy nó báo lỗi . Đặc biệt là cái giòng Nameoffamily Thanhvien[number]; (P/s: Trên bài mẫu cái dòng này là như vậy đó@@)
Mong các bác cao tay sửa dùm em với nha!! Kiến thức còn nông cạn lắm .

viết 20:35 ngày 30/09/2018

Chào bạn! trước tiên để post code bạn nên đọc topic này:

Làm sao để có thể hiển thị syntax highlighting bằng markdown? Các bạn phải đánh dấu ``` như ví dụ dưới đây Chú ý, dấu ``` được tạo ra bởi nút nằm bên trái số 1 trên bàn phím, nút này sẽ là ~ khi bấm giữ Shift Ví dụ cho C Nội dung: ``` void main() { } ``` Và đừng quên ``` ở cuối Kết quả void main() { } Ví dụ cho Pascal Nội dung: ``` Program HelloWorld; Begin WriteLn('Hello world!') {no ";" is required after the last statement of a block - adding one adds a "null stateme…

Thứ 2 là 2 phương thức getData và setData bạn phải khai báo trong class. Và khi gọi phương thức ngoài class thì phải:

void Nameoffamily::setData(){
...
}

Theo mình biết là như vậy

Tran viết 20:34 ngày 30/09/2018

Ủa mình có khai báo setData và getData trong Class rồi mà bạn có khai báo ở ngoài Class đâu?

viết 20:32 ngày 30/09/2018

à mình nhầm

vũ xuân quân viết 20:27 ngày 30/09/2018

const int number = i;

	Nameoffamily Thanhvien[number];

Đoán đoán là sai khúc này.
Vì khai báo mảng thì số phân từ phải cụ thể, chính xác. Không cho phép nhận giá trị từ bàn phím.
Đành nhờ cao nhân khác vào chỉ vậy.

Pham Van Hai viết 20:41 ngày 30/09/2018

Mình dùng g++ (gcc) biên dịch chỉ bị lỗi:

  fflush(stdin);
         ^
hello.cxx:20:15: error: ‘fflush’ was not declared in this scope
  fflush(stdin);```

sau khi thêm thư viện ```#include <cstdio.h>``` và thay ``` fflush(stdin);``` thành ```getchar();```. Chương trình chạy bình thường không có lỗi gì

#include
#include
#include

using namespace std;

class Nameoffamily
{
private:
string name;
string QH;
int Birthday;

public:

void setData()
{
	cout << "Enter your name: ";
	getline(cin, name);
	getchar();	//fflush(stdin);
	cout << "Enter you QH: ";
	getline(cin, QH);
	getchar();	//fflush(stdin);
	cout << "Enter your birthday: ";
	cin >> Birthday;
}
void getData()
{
	cout << "Your name: " << name << endl;
	cout << "Your QH: " << QH << endl;
	cout << "Your birthday: " << Birthday << endl;

}

};
int main()
{
int i;
out << "Enter number of family: ";
cin >> i;
const int number = i;

Nameoffamily Thanhvien[number];

for (i = 0; i < number; i++) {
	cout << "No: " << i + 1 << "/" << number << endl;
	Thanhvien[i].setData();

}
cout << endl;
cout << "==OutPut==" << endl;
for (int i = 0; i < number; i++)
	Thanhvien[i].getData();

return 0;

}

Tran viết 20:36 ngày 30/09/2018

Oh cám ơn nhé @Pham_Van_Hai. Mình đã thử và chạy rất ngon. Cám ơn bạn đã góp ý nhé!!
(P/s: Test tuyệt vời trên Dev C++ nhưng còn VS thì ko chạy được nhưng ko sao!!)

Tran viết 20:41 ngày 30/09/2018

Cơ mà mình cũng thử cả 2 code đều chạy tốt nhưng cái nào cũng chạy tốt trên Dev C++ còn trên Visual Studido thì cả 2 đều không chạy được lạ nhỉ !!!

Bài liên quan
0