Используйте один и тот же test-main для общего и статического векторного класса, используя template / alias - PullRequest
0 голосов
/ 16 мая 2019

Нам дали test-main для нашего собственного 3-float Vector-класса под названием "Vec3f", который должен был быть реализован с помощью массива. После этого нам сказали преобразовать его в общий векторный класс для любого типа данных и N´s. Предполагалось, что test-main для этого класса останется прежним, нам сказали, чтобы он запускался с использованием псевдонимов.

Тестовый класс учителей работает с утверждениями, и в этом проблема. Класс 3 float Vector назывался Vec3f, и он был заменен на Vec в общем. Например:

cout << "  value type and dimension: ";
        assert((typeid(Vec3f::value_type).name() == typeid(float).name()));
        assert((Vec3f::dimension == 3));

        cout << "passed." << endl;

Пока все хорошо, но после объявления псевдонимов для общего: "using Vec3f = Vec<float,3>;" Выдает много ошибок утверждения.

"В классе Vec <3, float> нет ни одного члена с именем" value_type "или" dimension ". Ошибка 0135 Или это говорит, что assert не определен должным образом. Конечно я включил cassert.

Мы должны использовать только массив std. Больше никаких переменных. Поэтому я не могу объявить value_type и измерение .... Иногда даже говорится, что cout неоднозначен, я понятия не имею, почему. Спасибо за помощь. Stackoverflow что-то делает с inlcudes, поэтому я выбросил их sry.

«Начало основного класса без включений»

//using namespace my;
using namespace std;
void test_Vec() {

    using Vec3f = Vec<float,3>;

ifndef NDEBUG
    cout << "======================" << endl;
    cout << "     Testing Vec      " << endl;
    cout << "======================" << endl;

    {
        cout << "  value type and dimension: ";
        assert((typeid(Vec3f::value_type).name() == typeid(float).name()));
        assert((Vec3f::dimension == 3));

        cout << "passed." << endl;
    } 

.......

...