Bloodless Mesaj tarihi: Temmuz 11, 2015 Paylaş Mesaj tarihi: Temmuz 11, 2015 Merhaba arkadaşlar. Basit bir vektör sınıfı oluşturmaya karar verdim. Fakat ufak bir sorunum var. myVec.h #ifndef MYVEC_H_INCLUDED #define MYVEC_H_INCLUDED template <typename vec_t> class myVec { vec_t *arr; size_t vsize; size_t maxsize; void alloc_new(size_t); public: myVec(); myVec(size_t); myVec(const myVec &); ~myVec(); size_t vSize(); size_t maxSize(); void push_back(); vec_t operator[](int); vec_t &operator=(const myVec &); }; #endif // MYVEC_H_INCLUDED myVec.cpp #include "myVec.h" /** * Default Constructor */ template <typename vec_t> myVec<vec_t>::myVec(){ this->maxsize = 10; this->arr = new vec_t [maxsize]; this->vsize = 0; } /** * Default Constructor with parameters */ template <typename vec_t> myVec<vec_t>::myVec(size_t sz = 10){ this->maxsize = sz; this->arr = new vec_t [maxsize]; this->vsize = 0; } /** * Copy Constructor with parameters */ template <typename vec_t> myVec<vec_t>::myVec(const myVec &v) { if (this != &v){ this->maxsize = v.maxSize(); this->vsize = v.vSize(); } } template class myVec<int>; template class myVec<double>; template class myVec<char>; Copy Constructor oluştururken sadece sorun yaşıyorum. Copy Constructorda şöyle bir hata veriyor. In instantiation of 'myVec::myVec(const myVec&) [with vec_t = int; myVec = myVec]':| required from here| 29|error: passing 'const myVec' as 'this' argument of 'size_t myVec::maxSize() [with vec_t = int; size_t = unsigned int]' discards qualifiers [-fpermissive]| Başka basit bir class oluşturdum. Aynı şekilde template class onda böyle bir sorunla karşılaşmadım. Herşeyde aynı myTest.h #ifndef MYTEST_H_INCLUDED #define MYTEST_H_INCLUDED template <typename data_t> class myTest{ data_t data; public: myTest(); myTest(data_t); myTest(const myTest&); void setd(data_t); data_t getd(); }; #endif // MYTEST_H_INCLUDED myTest.cpp #include "myTest.h" template <typename data_t> myTest<data_t>::myTest(){ this->data = 0; } template <typename data_t> myTest<data_t>::myTest(data_t v){ this->data = v; } template <typename data_t> myTest<data_t>::myTest(const myTest &v){ this->data = v.data; } template <typename data_t> void myTest<data_t>::setd(data_t v){ this->data = v; } template <typename data_t> data_t myTest<data_t>::getd(){ return this->data; } template class myTest <int>; template class myTest <double>; template class myTest <char>; Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Borastus Mesaj tarihi: Temmuz 11, 2015 Paylaş Mesaj tarihi: Temmuz 11, 2015 const member functions can only call other const member functions. You can't call a non-const member function from a const one. maxSize const olmadıgından hata oluyor. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Bloodless Mesaj tarihi: Temmuz 12, 2015 Konuyu açan Paylaş Mesaj tarihi: Temmuz 12, 2015 Borastus said: const member functions can only call other const member functions. You can't call a non-const member function from a const one. maxSize const olmadıgından hata oluyor. bir sorum daha olacak. template <typename data_t> myTest<data_t>& myTest<data_t> : : operator=(const myTest &t){ this->data = t.data; return *this; } şeklinde = operatorunu düzenledim. const myTest &t olarak referans geçiriyorum fakat nasıl oluyorda t.data şeklinde private bir değişkene ulaşabiliyorum? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Borastus Mesaj tarihi: Temmuz 12, 2015 Paylaş Mesaj tarihi: Temmuz 12, 2015 Bloodless said: bir sorum daha olacak. template <typename data_t> myTest<data_t>& myTest<data_t> : : operator=(const myTest &t){ this->data = t.data; return *this; } şeklinde = operatorunu düzenledim. const myTest &t olarak referans geçiriyorum fakat nasıl oluyorda t.data şeklinde private bir değişkene ulaşabiliyorum? yanlış anlamadıysam sorunun cevabı şurda yazıyor http://stackoverflow.com/questions/12479875/why-overloading-can-access-private-members-of-argument Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Kojiroh Mesaj tarihi: Temmuz 12, 2015 Paylaş Mesaj tarihi: Temmuz 12, 2015 Şöyle ki, tanımladığın ya da override ettiğin = operatörü myTest class'ına ait bi operatör haline geldiği için o class scope'undakilere erişebilir rahatlıkla. C#'taki extension metodlar, Java'daki inner class'lar ve Scala'daki operator overload'lar da aynı şekilde işliyo. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar