Итак, я работаю над тем, что, как я думал, будет быстрым и легким проектом в течение пары часов, и я не могу заставить его работать! Это заставляет меня расстраивать LOL. Я должен быть рядом, но, возможно, нет.Как использовать статические объекты и методы !? C++ Frustration
Я включу свой код с комментариями, объясняя, что он должен делать. По сути, это использование частного конструктора и деструктора. Целое число, а затем общедоступная статическая функция для возврата ссылки на объект в классе - и публичная функция, которая должна отображать целое число и увеличивать его. Я продолжаю получать ошибки и ошибки инициализации.
HERES ОШИБКИ:
Singleton.h: In function ‘int main(int, char**)’:
Singleton.h:28:2: error: ‘Singleton::Singleton()’ is private
main.cpp:38:12: error: within this context
Singleton.h:29:2: error: ‘Singleton::~Singleton()’ is private
main.cpp:38:12: error: within this context
Любая помощь или предложения будут с благодарностью!
Heres мой код (Singleton.h, Singleton.cpp, main.cpp):
Singleton.h:
#ifndef SINGLETON_H
#define SINGLETON_H
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
class Singleton {
public:
static Singleton& instance(); //returns a reference to a Singleton obj
void sendOutput(); //prints member variable and increments it
private:
int myInt; //member integer-variable
Singleton(); //constructor
~Singleton(); //destructor
};
#endif
Singleton.cpp:
#include <string>
#include "Singleton.h"
using namespace std;
//Displays to console that the obj was created. Initializes the member variable
Singleton::Singleton(){
myInt = 0; //member variable
cout << "Singleton Object Created!" << endl;
}
//destructor - displays to console that the Singleton object was destructed
Singleton::~Singleton(){
// delete myObj;
cout << "Singleton Object Destructed!" << endl;
}
//display member variable value and increment
void Singleton::sendOutput(){
cout << "Request to send data to output to console" << endl;
cout << "Integer Value: " << myInt << endl;
myInt++;
}
//REQUIRED: Static method with a reference to an object of this class return type
//create a static Singleton object and return it
Singleton& Singleton::instance(){
static Singleton myObj;
return myObj;
}
main.cpp:
#include "Singleton.h"
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;
//Another requirement - demo static variables
void static_test(){
static int a = 1;
cout << a << endl;
a++;
}
int main(int argc, char * argv[]){
static_test();
static_test();
static_test();
//messed around with this for awhile - got it to work a few times
//messed it up a few more times O.o
Singleton mySingletonObj;
Singleton& sRef = Singleton::instance();
//sRef = Singleton::instance();
sRef.sendOutput();
return 0;
}
Мысли/Предложения/Вопросы/вопросы? Все, что поможет облегчить разочарование, вызвало у меня LOL. Мне кажется, слишком сложно вызвать у меня такую проблему. Благодаря!
Где мой Obj определен? - О, я это вижу. Нет, не делай этого. Вы не можете вызвать delete на статическом объекте или произойдет хаос ... –
Я уверен, что c-smile правильно касается вашей проблемы, но в общем, пожалуйста, разместите фактические ошибки, которые вы получите. – SirPentor
Я избавился от delete myObj; И я редактировал свой вопрос, чтобы добавить ошибки, которые я получаю. – ModdedLife