"nicht deklarierter Bezeichner" ist eigentlich erklärt
Ich habe immer Fehler C2065s für die Variablen habe ich deklariert in der header-Klasse-Datei als öffentliche Mitglieder-Daten, ein int und ein Zeiger auf int. In den code-Zeilen gekennzeichnet werden, als fehlerhaft sind, nur verwenden, wenn ich diese Variablen in eine Funktion innerhalb der Klasse Konstruktor, erscheinen Sie, um durch okay.
Ich bin mit Visual Studio 2010 Express zu schreiben normalen C++ (nicht Visual C++), und hier ist die Ausgabe der compiler-error-log:
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 ==========
Schließlich, hier sind meine code-Blöcke und Header:
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;
}
- Nicht
#pragma once
in einer cpp. Nur Kopfzeilen. - In der Tat, nicht
#pragma once
überhaupt. Verwenden Sie eine#ifndef
header-guard.#pragma once
, während weit verbreitet, ist flippig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast vergessen die Class-id für die destroyPointer () - Methode.
Versuchen
statt
Diese:
Sollte
etc.
Die Funktion destroyPointer() ist nicht Teil der Klasse in die cpp-Datei.
Es sollte sein:
aber ist:
Dies ist der Grund, warum es nicht finden können, q