Dostęp do prywatnego składnika klasy(multiarray)

0

Witam,

Chciałbym prosić o pomoc w następującym problemie. Mam klasę Matrix która jako swój prywatny składnik posiada multiarray . Owy tablica wypełniona jest już wartościami. W funkcja która przeładowuje operator+ chciałem użyć tej tablicy zarówno dla obiektu stojącego na lewo od "+" jak i na prawo . Problem w tym,że najwyraźniej nie umiem się do niej odwołać . Bardzo proszę o poradę.
Kod klasy :

 
      	template <class T>
    		class Matrix {
    			private :
     				   typedef boost::multi_array<T, 2> ABC;
    				    int result_i;
     				   int result_j;
   			 public:
      				  Matrix(int i,int j,std::string const & msg) {
        				  this->result_i = i;
        				  this->result_j = j;
         			 	  ABC a(boost::extents[i][j]);
          			 	  wypelnij_liczbami(a,msg);
    				    }	
    			    /** 
				  * Inne funkcje	 
				  */
			}; 

Kod funkcje w której chcę odwołać się do multiarray ABC

 
		template<typename T>
		Matrix<T> Matrix<T>::operator+(const Matrix<T> & RightMatrix) {
                  	Matrix<int> wynik_sumowania(this->getI(),this->getJ());
                 	 for(int x = 0; x < this->ABC.shape()[0]; x++)  {
                       		 for(int y = 0; y < this->ABC()[1]; y++) {
                             		wynik_sumowania.ABC[x][y] = ABC[x][y] + RightMatrix.ABC[x][y];
                        	}
               		 }
   		     return wynik_sumowania;
		}  
		/* 
		 * Kompilator z każdym wystąpieniem ABC wyrzuca  
		 * __ invalid use of 'Matrix<int>::ABC__ 
		 * Próbowałem się odwołać zarówno poprzez __this->__ jak i __this.__ nadal to samo 
		 * Próbowałem stowrzyć metodę GETABC która zwróci mi multiarray jednak tam jest tam sam problem przy __return this->ABC;__

Z góry dziękuję za pomoc.
Pozdrawiam,
soyer

1

typedef boost::multi_array<T, 2> ABC; jest deklaracją typu o nazwie ABC;
tu: ABC a(...) masz jedyne poprawne użycie - i tu z całą pewnością kompilator się nie czepia.
Natomiast to: this->ABC.shape()[0] WTF? Z takim samym sukcesem możesz napisać: this->std::string.length()

0
_13th_Dragon napisał(a):

typedef boost::multi_array<T, 2> ABC; jest deklaracją typu o nazwie ABC;
tu: ABC a(...) masz jedyne poprawne użycie - i tu z całą pewnością kompilator się nie czepia.
Natomiast to: this->ABC.shape()[0] WTF? Z takim samym sukcesem możesz napisać: this->std::string.length()

Ok rozumiem,nie było by problemu gdybym mógł to w mainie napisać . Ja jednak mam tu klasę wobec tego :

  
	private : 
		   typedef boost::multi_array<T, 2> ABC ;  // nowy Typ ABC 
		   ABC a; // obiekt 'a' dla typu ABC 

Z racji , że jest to składnik prywatny aby mieć do niego dostęp potrzebna mi metoda get().

 
	ABC Matrix<T> getA() { 
		return this->a; 
	} 

Tu jednak mam problem ponieważ kompilator nie wie co to jest ABC . Mógłbym deklaracje typu wywalić przed klasę ,tyle że ma ona w sobie parametr T który poznajemy dopiero w czasie kompilacji . Jak ten problem rozwiązać ?.

Dzięki za pomoc.

1
ABC &getA() {  return a; }
  • Może przeczytaj jakiś kurs pobieżnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1