Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

[C/C++] Tam olarak neyi yanlış yapıyorum?


Bloodless

Öne çıkan mesajlar

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ş

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ş

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ş

×
×
  • Yeni Oluştur...