Может ли кто-нибудь мне помочь? У меня есть файлы:Функция друга в классе
prueba.h
#ifndef PRUEBA_H
#define PRUEBA_H
#include <iostream>
#include <cstring>
using namespace std;
class cadena{
public:
cadena();
cadena(const char *c);
cadena(int n);
cadena(const cadena &Cad);
~cadena();
void DevDir();
void Asignar(const char *dest);
char *Leer(char *c);
private:
char *cad;
short valor;
friend void tec(cadena obj);
};
#endif
prueba.cpp
#include "prueba.h"
cadena::cadena():cad(NULL),valor(128){}
cadena::cadena(const char *c){
cad = new char[strlen(c)+1];
strcpy(cad,c);
}
cadena::cadena(int n){
cad = new char[n+1];
cad[0] = 0;
}
cadena::cadena(const cadena &Cad){
cad = new char[strlen(Cad.cad)+1];
strcpy(cad,Cad.cad);
}
cadena::~cadena(){
delete[] cad;
}
void cadena::DevDir(){
cout << "dir valor: " << &cad << endl;
}
void cadena::Asignar(const char *dest){
delete[] cad;
cad = new char[strlen(dest)+1];
strcpy(cad,dest);
}
char *cadena::Leer(char *c){
strcpy(c,cad);
return c;
}
void tec(cadena obj){
cout << obj.valor << endl;
}
и мой файл главная:
#include "prueba.h"
int main(){
cadena Cadena1;
tec(Cadena1);
cin.get();
return 0;
}
Проблема моя подруга функция (КТР) , Нет проблем с компиляцией, но при запуске он показывает мне ошибку, как при нарушении доступа к памяти.
Если я удалю эту функцию, все будет хорошо.
Я использую Code :: блоки и используя режим debbuger показать мне это:
- Это ошибка в основном, в функции ТЕС.
- Ошибка в файле .cpp, в определении копии конструктора.
Но если я удалю функцию tec main, у меня нет ошибок.
Вы забыли следовать правилу три/пять/ноль. – chris
Скомпилируйте все предупреждения и информацию об отладке (т. Е. С помощью 'g ++ -Wall -g' в Linux) и научитесь использовать отладчик (' gdb' в Linux). –