2013-04-22 28 views
7

Tôi có một chương trình rất đơn giản được viết để xác định toán tử * trong một lớp mẫu mảng. Khi tôi cố gắng biên dịch nó cho tôi một lỗi "bất hợp pháp bất hợp pháp". Bất kỳ trợ giúp nào về vấn đề này sẽ được đánh giá cao!Lỗi C2100 - Indirection bất hợp pháp

Đây là định nghĩa điều hành:

template <typename T>                 
NumericArray<T> NumericArray<T>::operator * (const int factor) const 
{ 
NumericArray<T>* TempArray2 = new NumericArray<T>(Size()); 
for (int i=0; i<Size(); i++) 
{ 
    *TempArray2[i] = ((GetElement(i))*(factor)); 
} 
return *TempArray2; 
} 

Và đây là việc thực hiện trong hàm main kiểm tra:

cout<<((*intArray1)*5).GetElement(0);         
cout<<((*intArray1)*5).GetElement(1); 
cout<<((*intArray1)*5).GetElement(2); 

Bất kỳ ý tưởng?

Trả lời

10

Đừng quên các quy tắc operator precedence của bạn. Có vẻ như bạn muốn:

(*TempArray2)[i] 

Nếu không biểu hiện của bạn *TempArray2[i] được coi là *(TempArray2[i]) và Tôi cho rằng loại NumericArray<T> của bạn không có các nhà điều hành unary* quá tải.

1

Trong *TempArray2[i], * được áp dụng cho TempArray[2] vì các quy tắc ưu tiên và có cơ hội công bằng mà các phần tử mảng không có nhà điều hành * đơn nhất.

Nhưng việc bạn sử dụng phân bổ động và sau đó bỏ qua hội nghị để trở lại theo giá trị nghĩa là bạn bị rò rỉ bộ nhớ.
(Bạn không cần phải new để tạo các đối tượng trong C++ - có thể bạn không cần phải sử dụng nó trong main một trong hai.)

này sẽ tốt hơn (và tránh các vấn đề gián tiếp toàn bộ):

template <typename T>                 
NumericArray<T> NumericArray<T>::operator * (int factor) const 
{ 
    NumericArray<T> TempArray(Size()); 
    for (int i = 0; i < Size(); i++) 
    { 
     TempArray[i] = GetElement(i) * factor; 
    } 
    return TempArray; 
} 
Các vấn đề liên quan