Основы ПрограмированияПотренируемся на ночь?
#121
Отправлено 12.10.2005, 01:00:15
1.синтаксис: неопределённый ид MyclassID или не поле класса
2.синтаксис: неопределённый ид MyclassName или не поле класса
3.синтаксис: ~Myclass() не может быть деструктором при несовпадении имени
4.(может быть?)рантайм: если компиллятор для char* вдруг решит за присвоение взять копирование содержимого строки (мало ли, хотя по дефолту битовое копирование), то вылетит память.
в других строках багов не заметил.
#122
Отправлено 12.10.2005, 04:07:35
А, так вы еще и в С++ разбираетесь? Замечательно! Тогда ответьте на такой простой вопрос:
class CMyclass { int MyClassID; char* MyClassName; CMyclass(); CMyclass(int ID, char* Name){MyclassID = ID; MyclassName = Name}; ~Myclass(); }Есть ли здесь ошибки? Какие?
давно C++ не использовал, избаловали уже Javы и C#ы
копирование адреса строки -> непредсказуемость поведения...
не помню точно, но вроде выделить память для строки тоже бы не помешало...
#124
Отправлено 12.10.2005, 22:15:25
class CMyclass { int MyClassID; char* MyClassName; CMyclass(); CMyclass(int ID, char* Name){MyclassID = ID; MyclassName = Name}; ~Myclass(); }Есть ли здесь ошибки? Какие?
g++ этот код не одобряет.
main.cc:7: destructor `Myclass' must match class name `CMyclass' main.cc:10: warning: `class CMyclass' only defines a private destructor and has no friends main.cc:10: semicolon missing after declaration of `CMyclass' main.cc: In method `CMyclass::CMyclass(int, char *)': main.cc:6: `MyclassID' undeclared (first use this function) main.cc:6: (Each undeclared identifier is reported only once main.cc:6: for each function it appears in.) main.cc:6: `MyclassName' undeclared (first use this function) main.cc:6: parse error before `}' main.cc: At top level: main.cc:11: extraneous `int' ignored main.cc:11: semicolon missing after declaration of `class CMyclass' main.cc: In function `int main()': main.cc:7: `CMyclass::~CMyclass()' is private main.cc:12: within this context main.cc:5: `CMyclass::CMyclass()' is private main.cc:12: within this context
Сообщение отредактировал v04bvs: 12.10.2005, 22:16:23
#126
Отправлено 13.10.2005, 00:56:33
Вы сделали правильные замечания, но нашли пока еще не все ошибки. Даже очевидные ошибки синтаксиса пока еще остаются не все замечены.
Но это еще не все: очевидные легко видимые ошибки, вроде неправильного регистра букв в именах переменных и опечатки в имени деструктора я сделал в основном для того, чтобы замаскировать главную ошибку. Какую?
Сообщение отредактировал Visual1: 13.10.2005, 00:58:45
#127
Отправлено 13.10.2005, 02:58:17
1.сначала я бы воткнул перед ретурном в теле конструктора.
2.затем после описания класса.
всё, больше ошибок в упор не вижу. логические могут быть, но могут оказаться намеренным замыслом.
#132
Отправлено 13.10.2005, 21:21:11
#!perl my @arr = qw/12345 12346 12344 12374/; my $ran = '12345'; for my $num (@arr) { my $i = 0; for my $ind ( 0..( length $ran ) - 1 ) { $i++ if ( ( substr $ran, $ind, 1 ) eq ( substr $num, $ind, 1 ) ); } print $i; }#!perl my @arr = qw/12345 12346 12344 12374/; my $ran = '12345'; my @spl = split '',$ran; for my $num (@arr) { my $sum = 0; my $i = 0; while ( $num =~ m/($spl[$i++])|./g ) { $sum++ if $1; } print $sum; }
Одного не могу понять: уже было решение этой задачи на языке J в 3 строки. Зачем нужно писать уродское решение на языке которого даже и не знаешь толком?
Вот правильное решение на Perl:
use PDL; $v = pdl(1,2,3,4,5); $a = pdl [[1,2,3,4,5],[1,2,3,4,6],[1,2,3,4,4],[1,2,3,7,4]]; print sumover($v == $a);
Вот из-за таких неучей Perl считают медленным и нечитаемым языком.
#133
Отправлено 14.10.2005, 00:19:52
Зачет! (или "зачот" - сейчас так пишут по новому синтаксису)гы. А как этим классом пользовацца? Он же весь насквозь приватный!
Это и есть главная ошибка - ни один объект такого класса в программе создан быть не может.
(Хотя подобный нереальный класс без единого объекта на его основе все-таки может понадобиться. Но это уже немного другая тема - абстрактные классы и чистые виртуальные функции).
yedyge:
Договориться до того, что есть return в конструкторе! Спасибо, повеселили!
Но зато Вы очень хорошо заметили ошибочное и опасное объявление char* в секции данных.
#134
Отправлено 14.10.2005, 03:26:59
dzid:
Зачет! (или "зачот" - сейчас так пишут по новому синтаксису)гы. А как этим классом пользовацца? Он же весь насквозь приватный!
Это и есть главная ошибка - ни один объект такого класса в программе создан быть не может.
Ну это было все-таки:
main.cc:10: warning: `class CMyclass' only defines a private destructor and has no friends
(Хотя подобный нереальный класс без единого объекта на его основе все-таки может понадобиться. Но это уже немного другая тема - абстрактные классы и чистые виртуальные функции).
ага CNothing
#135
Отправлено 14.10.2005, 12:40:17
я лично всегда return держу в уме, и я всегда себя проверяю на то, что именно мне придётся возвращать. функции без return терпеть не выношу.
кстати, таки взял компиллятор (borland c++ 5) и заявляю, что это полностью рабочий код:
class A { int A; public: A(int A) { this->A = A; return; }; };
#137
Отправлено 14.10.2005, 13:34:25
И вот за это я не люблю C++ Но блин, приходится......
(Хотя подобный нереальный класс без единого объекта на его основе все-таки может понадобиться. Но это уже немного другая тема - абстрактные классы и чистые виртуальные функции).
...
Во, примерчик на разминку (вообще, боянистый примерчик )
этот код... Что в нем не так?#include <stdio.h>
unt numbits(unsigned word)
{
int n=0;
int density[16] = {0,1,2,2,1,2,2,3,1,2,2,3,2,3,4};
while (word > 0)
{
n += density [word & 0xf];
word >>= 4;
}
return n;
}
int main() { printf ("%d\n", numbits (0x18f)); }
Сообщение отредактировал dzid: 14.10.2005, 13:35:37
#140
Отправлено 15.10.2005, 02:05:35
И в чем же тут удобство?Не помню, допускается ли стандартом return в конструкторе, но что это удобно - факт! Разумеется, return-ом нельзя ничего return-ить
Ну вы ребята даете. Один "не помню", другой - "как помню".как помню "return" в конструкторе не требуется, но и не запрещается. потому констр с ретурном компиллится и бегает нормально.
Вообще-то, конструктор класса по самому своему определению не возвращает никаких значений, так что оператор return в нем - неудачная шутка кодера в лучшем случае.
В стандарте С99 разрешено указание операторов return без возвращаемых значений, но только в функции типа void. Значит, указывая в конструкторе класса return, вы пытаетесь навязать компилятору, будто бы он имеет дело не с конструктором класса, а с функцией языка C, имеющей тип void. Конечно, ничего у вас не получается - компиляторы уже давно умные!
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0