Странное "имя класса" не было объявлено - PullRequest
0 голосов
/ 16 апреля 2020

container.hpp

#ifndef CONTAINER_HPP
#define CONTAINER_HPP

#include <functional>


namespace lasd {

/* ************************************************************************** */

class Container {

private:

  // ...

protected:

  unsigned long size = 0;

public:

  // Destructor
  virtual ~Container() = default;

  /* ************************************************************************ */

  // Copy assignment
  Container& operator=(const Container&) = delete; // Not usable.

  // Move assignment
  Container& operator=(Container&) = delete; // Not usable.

  /* ************************************************************************ */

  // Comparison operators
  bool operator==(const Container&) const noexcept = delete; // Not usable.
  bool operator!=(const Container&) const noexcept = delete; // Not usable.

  /* ************************************************************************ */

  // Specific member functions

  virtual inline bool Empty() const noexcept;

  virtual inline unsigned long Size() const noexcept;

  virtual void Clear() = 0;

};

#include "container.cpp"

}

#endif

контейнер. cpp

// Specific member functions (Container)


inline unsigned long Container::Size() const noexcept{
  return size;
}

inline bool Container::Empty() const noexcept{
  return size == 0;
}

Дайте это в выводе. Самое смешное, что весь этот код предоставлен моим профессором, а я только кодировал файл. cpp. Я уже пытался добавить #include "container.hpp" в мой файл. cpp.

||=== Build: Debug in Exercise1 (compiler: GNU GCC Compiler) ===|
||=== Build: Debug in Exercise1 (compiler: GNU GCC Compiler) ===|
C:\Users\Giulia\Desktop\Università\Laboratorio ASD\exercise1\container\container.cpp|4|error: 'Container' has not been declared|
C:\Users\Giulia\Desktop\Università\Laboratorio ASD\exercise1\container\container.cpp|4|error: non-member function 'long unsigned int Size()' cannot have cv-qualifier|
C:\Users\Giulia\Desktop\Università\Laboratorio ASD\exercise1\container\container.cpp||In function 'long unsigned int Size()':|
C:\Users\Giulia\Desktop\Università\Laboratorio ASD\exercise1\container\container.cpp|5|error: 'size' was not declared in this scope|
C:\Users\Giulia\Desktop\Università\Laboratorio ASD\exercise1\container\container.cpp|8|error: 'Container' has not been declared|
C:\Users\Giulia\Desktop\Università\Laboratorio ASD\exercise1\container\container.cpp|8|error: non-member function 'bool Empty()' cannot have cv-qualifier|
C:\Users\Giulia\Desktop\Università\Laboratorio ASD\exercise1\container\container.cpp||In function 'bool Empty()':|
C:\Users\Giulia\Desktop\Università\Laboratorio ASD\exercise1\container\container.cpp|9|error: 'size' was not declared in this scope|
C:\Users\Giulia\Desktop\Università\Laboratorio ASD\exercise1\container\container.cpp|38|error: expected initializer before '<' token|
||=== Build failed: 7 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Во время видео лекций профессора он скомпилировал код, и он работал так хорошо. Я действительно не могу понять, почему, используя Code :: Blocks, он дает мне эту ошибку (я тоже пробовал на gpp-компиляторе в редакторе Atom, с точно таким же результатом).

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Скорее всего, в вашем проекте вы компилируете container.cpp отдельно, как любой разумный проект. Тем не менее, ваш профессор сделал то, что никогда не пройдет проверку кода - он включил файл cpp в заголовочный файл.

Вам нужно изменить свой проект, чтобы он не компилировался container.cpp отдельно (или, что еще лучше, избавьтесь от этого включения и исправьте container.cpp, чтобы сделать возможным его компиляцию).

0 голосов
/ 16 апреля 2020

Обратите внимание на namespace lasd в вашем заголовочном файле. Вам следует либо явно указать пространство имен каждой функции в вашем файле cpp (lasd::Container::Size), либо также обернуть ее в блок namespace lasd { ... }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...