& quot; необъявленный идентификатор & quot; фактически объявлено

Я получаю ошибку 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 = &num;
}

BaseClassWithPointer::BaseClassWithPointer(int value)
{
num = value;
q = &num;
}

BaseClassWithPointer::BaseClassWithPointer(const BaseClassWithPointer& otherObject)
{
num = otherObject.num;
q = &num;
}

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 = &num;
}

return *this;
}

9

Решение

Вы забыли идентификатор класса для вашего метода destroyPointer ().
Пытаться

void BaseClassWithPointer::destroyPointer()

вместо

12

Другие решения

Это:

void destroyPointer()

...

void print()

Должно быть

void BaseClassWithPointer::destroyPointer()
{
....
}

void BaseClassWithPointer::print()
{
....
}

и т.п.

4

Функция destroyPointer () не является частью класса в файле cpp.
Так должно быть:

void BaseClassWithPointer::destroyPointer()
{
delete q;
}

но это:

void destroyPointer()
{
delete q;
}

Вот почему он не может найти д

1
По вопросам рекламы [email protected]