2010-05-15 33 views
7

Tôi đang gặp một số rắc rối với thông điệp cảnh báo này, nó được thực hiện trong một lớp mẫu chứatoán hạng trái của dấu phẩy không có hiệu lực?

int k = 0, l = 0; 
    for (k =(index+1), l=0; k < sizeC, l < (sizeC-index); k++,l++){ 
     elements[k] = arryCpy[l]; 
    } 
    delete[] arryCpy; 

này là cảnh báo tôi nhận được

cont.h: In member function `void Container<T>::insert(T, int)': 
cont.h:99: warning: left-hand operand of comma has no effect 
cont.h: In member function `void Container<T>::insert(T, int) [with T = double]': 
a5testing.cpp:21: instantiated from here 
cont.h:99: warning: left-hand operand of comma has no effect 
cont.h: In member function `void Container<T>::insert(T, int) [with T = std::string]': 
a5testing.cpp:28: instantiated from here 
cont.h:99: warning: left-hand operand of comma has no effect 
>Exit code: 0 

Trả lời

16

Khái niệm dấu phẩy a,b,c,d,e cũng tương tự như

{ 
    a; 
    b; 
    c; 
    d; 
    return e; 
} 

do đó, k<sizeC, l<(sizeC - index) sẽ chỉ trả lại l < (sizeC - index).

Để kết hợp các điều kiện, hãy sử dụng && hoặc ||.

k < sizeC && l < (sizeC-index) // both must satisfy 
k < sizeC || l < (sizeC-index) // either one is fine. 
2

Thay đổi:

for (k =(index+1), l=0; k < sizeC && l < (sizeC-index); k++,l++){ 

Khi bạn có biểu thức dấu phẩy được đánh giá, đối số ngoài cùng bên phải được trả về để:

của bạn
k < sizeC, l < (sizeC-index) 

biểu thức ước lượng:

l < (sizeC-index) 

và do đó bỏ lỡ

k < sizeC 

sử dụng && để kết hợp các điều kiện để thay thế.

4

Biểu thức k < sizeC, l < (sizeC-index) chỉ trả về kết quả của kiểm tra bên phải. Sử dụng && kết hợp kiểm tra:

k < sizeC && l < (sizeC-index) 
Các vấn đề liên quan