Декларация (!) класса влияет (!) на выполнение программы.
От: Аноним  
Дата: 24.07.09 14:23
Оценка:
Добрый день.

Есть BCB60 и есть простая программа:


#include <iostream.h>

class first;
typedef void (first::*func)();

class second{
private:
func ptroper1;
public:
second():ptroper1(0){}
//second();
};

//second::second():ptroper1(0){}

const char* message[]={
"message1",//0
"message2",//1
"message3" //2
};

void myprint(ostream* os,const char* msg[]){

const char* ptr=msg[1];

(*os)<<endl<<ptr;
}

#pragma argsused
int main(int argc, char* argv[]){
myprint(&cout,message);
return 0;
}


В этой программе при выполнении строки


const char* ptr=msg[1];


происходит ошибка CodeGuard с диагностикой Attempt to access 4 byte(s) at 0x004040A8+4

Если же вынести конструктор second из класса и написать его декларацию в таком виде:


class second{
private:
func ptroper1;
public:
second();
};

second::second():ptroper1(0){}


то эта ошибка пропадает.

Прошу заметить, что экземпляр класса second не создается и в первом ни во втором варианте. Присутствует только декларация класса second.

Вопрос:
1. Это глюк транслятора, или я что-то не понимаю?

Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.