Member 13296571 Ответов: 1

Переменная класса печати


Это мой заголовочный файл:
#include <iostream>
#include <cstdlib>

namespace assignment
{
    template<typename T>
    class vector
    {
      private:
        T * p;
        int size;
        int capacity;
      public:
        explicit vector()
        :p(nullptr), size(0), capacity(0)
        {
            p = new T[size];
        }
        ~vector()
        {
            delete p;
        }
        int getSize()const
        {
            return size;
        }
        int getCapacity()const
        {
            return capacity;
        }
        void push_back(const T &v)
        {
            if(size + 1 <= capacity)
            {
                //!<trivial
                p[size] = v;
                ++size;
            }
            else
            {
                //!<non-trivial
                capacity *= 2;
                //!<trivial
                p[size] = v;
                ++size;
            }
        }
        T pop_back(void)
        {
            --size;
            return p[size];
        }
        bool empty(void)const
        {
            return p == nullptr;
        }
    };
	void vector<float> Print(vector<float>&p)
	{
		std::cout << p << "  ";
		if(p == nullptr)
			std::cout << "(p.getSize=" << p.size << ", p.getCapacity=" << p.capacity << ")" << std::endl;
	}
}

И у меня есть это в мой файл main.cpp :
void TestPush(void)
{
    std::cout << "\n********** TestPush **********\n";
    assignment::vector<float> a;
    std::cout << "Empty array:\n";
    Print(a);

    std::cout << "push_back 5 floats:\n";
    for (float i = 0; i < 5; i++) {
        a.push_back(i);
        Print(a);
    }

    std::cout << "pop_back until empty:\n";
    while (!a.empty()) {
        a.pop_back();
        Print(a);
    }
}


Что я уже пробовал:

Я продолжаю получать эту ошибку:
ошибка: недопустимый Декларатор перед ‘печатью’
пустота вектор&ЛТ;поплавок&ГТ; печати(вектор&ЛТ;поплавок&ГТ;&амп;п)
^
ошибка: недопустимый Декларатор перед ‘печатью’
пустота вектор&ЛТ;поплавок&ГТ; печати(вектор&ЛТ;поплавок&ГТ;&амп;п)
^
главная.ЧГК:10:12: ошибка: ‘печать’ не был объявлен в этой области видимости
Печать (a);

Я перепробовал различные методы и до сих пор не решил эту ошибку.
Любая помощь и Совет будут очень признательны.

1 Ответов

Рейтинг:
2

KarstenK

Ваша функция печати - это функция класса. Вы должны изменить реализацию и вызвать ее на объекте.

// your header
void Print()
{
  std::cout << this << "  ";// this is the actual object pointer
}

 // usage
a.Print();

Кстати: я бы использовал print() с маленькими буквами, а также какое-нибудь другое имя, например debugPrint()