У меня есть класс, который я написал, предназначенный для представления векторов (в смысле линейной алгебры).Я только начал писать, чтобы он не закончился, но я вставил его и тестовый код здесь
Я не совсем уверен, что происходит.Я собирался написать перегруженный оператор << для тестирования через секунду, поэтому я пошел дальше и поместил его в свою основную функцию (чтобы я мог использовать ошибки компилятора, чтобы убедиться, что я написал его правильно).</p>
Что означает это предупреждение?почему он смотрит на адрес v?Я попытался удалить скобки из v, и в результате я получил this , кучу ужасных ошибок шаблона: `
In function 'typename boost::range_const_iterator<C>::type boost::range_detail::boost_range_begin(const C&) [with C = vect<float, 3u>]':
/usr/local/include/boost/range/begin.hpp:164: instantiated from 'typename boost::range_const_iterator<C>::type boost::begin(const T&) [with T = vect<float, 3u>]'
prelude/more_stdlib_ostreaming.hpp:64: instantiated from 'void more_stdlib_ostreaming_detail::print_range(std::basic_ostream<_CharT, _Traits>&, const Range&) [with C = char, Tr = std::char_traits<char>, Range = vect<float, 3u>]'
prelude/more_stdlib_ostreaming.hpp:76: instantiated from 'typename more_stdlib_ostreaming_detail::snd<typename R::iterator, std::basic_ostream<_CharT, _Traits>&>::type operator<<(std::basic_ostream<_CharT, _Traits>&, const R&) [with C = char, Tr = std::char_traits<char>, R = vect3f]'
t.cpp:42: instantiated from here
Line 45: error: 'const class vect<float, 3u>' has no member named 'begin'`
Я могу что-то увидеть, что здесь происходит, хотя.Похоже, что он каким-то образом использует диапазон Boost для и пытается перебрать мой контейнер, и это терпит неудачу, потому что я не определил begin () и end ().То же самое происходит, если я создаю экземпляр v, используя v (some_float), а не без паренов.
Итак, два вопроса:
Почему v()
ведет себя иначе, чемv
?Я думал, что объявление объекта без паренов всегда вызывает ctor по умолчанию, и явный вызов ctor по умолчанию не имеет значения?
Что здесь делает компилятор кодпада (gcc 4.1.2)?Имеет ли он шаблон, который автоматически пытается сгенерировать соответствующий оператор <</li>
Кроме того, не стесняйтесь говорить мне что-нибудь еще, я делаю здесь глупый / неправильный / плохой стиль (помимо броска моей собственной математической математики)библиотека для развлечения, которая, как я знаю, не нужна. Я делаю это как упражнение)