Я получаю ошибку C2065s для переменных, которые я объявил в заголовочном файле класса как открытые члены данных, один int и один указатель на этот int. Строки кода, помеченные как ошибочные, появляются только тогда, когда я использую эти переменные в функции — в конструкторе класса они, кажется, проходят нормально.
Я использую Visual Studio 2010 Express для написания обычного C ++ (не Visual C ++), и вот вывод журнала ошибок компилятора:
1>------ Build started: Project: Project 2, Configuration: Debug Win32 ------
1> BaseClassWithPointer.cpp
1>d:\libraries\documents\school\advanced c++\project 2\project 2\baseclasswithpointer.cpp(27): error C2065: 'q' : undeclared identifier
1>d:\libraries\documents\school\advanced c++\project 2\project 2\baseclasswithpointer.cpp(27): error C2541: 'delete' : cannot delete objects that are not pointers
1>d:\libraries\documents\school\advanced c++\project 2\project 2\baseclasswithpointer.cpp(32): error C2065: 'num' : undeclared identifier
1>d:\libraries\documents\school\advanced c++\project 2\project 2\baseclasswithpointer.cpp(33): error C2065: 'q' : undeclared identifier
1>d:\libraries\documents\school\advanced c++\project 2\project 2\baseclasswithpointer.cpp(34): error C2065: 'q' : undeclared identifier
1> Generating Code...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Наконец, вот мои блоки кода и заголовки:
BaseClassWithPointer.h
#pragma once
#include <iostream>
using namespace std;
class BaseClassWithPointer
{
public:
int num;
int *q;
BaseClassWithPointer();
BaseClassWithPointer(int value);
BaseClassWithPointer(const BaseClassWithPointer& otherObject);
void destroyPointer();
virtual void print();
virtual ~BaseClassWithPointer(); //Destructor is virtual so that derived classes use their own version of the destructor. ~ (2. Inheritance - base class with pointer variables – destructors.)
const BaseClassWithPointer& operator= (const BaseClassWithPointer &rhs); //Assignment operator is overloaded to avoid shallow copies of pointers. ~ (3. Inheritance – base class with pointer variables – assignment operator overloading.)
};
BaseClassWithPointer.cpp
#pragma once
#include "BaseClassWithPointer.h"#include <iostream>
using namespace std;
BaseClassWithPointer::BaseClassWithPointer()
{
num = 0;
q = #
}
BaseClassWithPointer::BaseClassWithPointer(int value)
{
num = value;
q = #
}
BaseClassWithPointer::BaseClassWithPointer(const BaseClassWithPointer& otherObject)
{
num = otherObject.num;
q = #
}
void destroyPointer()
{
delete q;
}
void print()
{
cout << "Num: " << num << endl;
cout << "Value pointed to by q: " << *q << endl;
cout << "Address of q: " << q << endl;
}
BaseClassWithPointer::~BaseClassWithPointer()
{
destroyPointer();
}
const BaseClassWithPointer& BaseClassWithPointer::operator=(const BaseClassWithPointer &rhs)
{
if (this != &rhs)
{
num = rhs.num;
q = #
}
return *this;
}
Вы забыли идентификатор класса для вашего метода destroyPointer ().
Пытаться
void BaseClassWithPointer::destroyPointer()
вместо
Это:
void destroyPointer()
...
void print()
Должно быть
void BaseClassWithPointer::destroyPointer()
{
....
}
void BaseClassWithPointer::print()
{
....
}
и т.п.
Функция destroyPointer () не является частью класса в файле cpp.
Так должно быть:
void BaseClassWithPointer::destroyPointer()
{
delete q;
}
но это:
void destroyPointer()
{
delete q;
}
Вот почему он не может найти д