C++ :: Can't Instantiate Abstract Class
Dec 28, 2012
two more questions
Code:
#ifndef PERFECTSIM_PARSER
#define PERFECTSIM_PARSER
#include <string>
#include <d3dx9.h>
#include <sstream>
#include <iostream>
#include "tinyxml inyxml.h"
using namespace std;
template<class T>
class GetValue {
protected:
virtual T get(TiXmlNode* pParent);
[code].....
1) Can't instantiate abstract class of GetVector3.
2) Don't you think the coding is very redundant ?
View 3 Replies
ADVERTISEMENT
May 28, 2013
I have an abstract base class - let's call it MyInterface - and a class that most classes in my program inherit from, let's call it MyBaseclass.
Let's assume that all my objects inherit MyBaseclass, some of which also inherit MyInterface. Now I want to collect objects in a container class, MyContainerclass. The container class is only interested in objects that implement MyInterface.
Now I know that all objects that inherit MyInterface also inherit MyBaseclass, but the compiler doesn't know that. MyContainerclass wants to call methods in MyBaseclass, but it collects pointers to MyInterface classes. I can't make MyInterface inherit MyBaseclass, because I will be using classes that I don't want to change (they are part of a framework) that already inherit MyContainerclass. IOW, I can't use virtual inheritance to get a nice inheritance diamond.
To sum up, I want to create a container class that:
1. Collects objects that implement MyInterface.
2. Calls MyBaseclass methods on the collected objects.
View 11 Replies
View Related
May 13, 2014
I need to create a vector of pointers and hold the book objects in it. then i have a virtual function in my books which is a pure virtual in LibraryItems. When i try to add the books object in my code, i understand that since the scope runs out there is no object that is added. so when i run print it gives me an error.
#include<iostream>
#include "books.h"
#include "library.h"
#include <vector>
using namespace std;
int main(int argc, char * argv[]) {
vector<LibraryItems* >libraryInfo;
[Code] .....
View 4 Replies
View Related
Feb 17, 2013
I have this header file called Shape.h containing these function declarations. and a Shape.cpp which contains the body of the function. I am not showing it since it is not needed.
//This is from Shapes.h header file
#ifndef SHAPES_H
#define SHAPES_H
#include <iostream>
[Code]....
I have this unfinished Main.cpp because the third line "JuanSanchez::Circle *pCar = new Circle; " is giving me a compiler error "error C2061: syntax error : identifier 'Circle' "
#include "Shapes.h"
int main()
{
const int arrayIndex = 4;
JuanSanchez::Shape *myShape[arrayIndex];
JuanSanchez::Circle *pCar = new Circle;
}
What Could be causing this error?
View 8 Replies
View Related
Nov 11, 2014
I have the following code:
class Element {
public:
..
virtual unsigned NumberOfNodes() = 0;
[Code] ....
Is it possible to implement this better? All the element stuff can be static, but this is not possible with the abstract class. I want to have Mesh independent of a specific element. With the code above, if I have multiple meshes I have one instance of an element, e.g., Triangle for each mesh. Although they are all exactly the same.
View 1 Replies
View Related
Oct 13, 2013
I am working on a project that requires me to create objects from a abstract class that has 2 child classes (that need to be derived). Any examples on how to do this? I looked online and the examples were pretty vague. the main error that I am getting is when I make a temp object with & in front of it (such as Employee &genericEmp) it throws a must be initialized error.
View 6 Replies
View Related
Oct 3, 2014
I want to create an abstract base class having a member function that can accept a templatized structure as its parameter, something that according to C++'s rules can't be done for a good reason.
That good reason it is because an abstract base class is intended to provide interface rules to the classes that will derive from it and should not deal with data.
But how would you go about doing something like the following which is probably a reasonable design decision?
template<typename T>
class Matrix { /* ... */ };
class iFile {
public:
virtual ~iFile() {} = 0;
virtual void Process(const Matrix<T>&) = 0;
[Code] .....
View 5 Replies
View Related
Feb 14, 2013
I am making a snake game just to give some context.
//LevelObject.hpp
class LevelObject {
public:
virtual void Update() = 0;
virtual void Draw(Canvas& canvas) = 0;
protected:
Vector3 location_;
[Code] ....
The problem I have is with the Size constructor and the abstract class LevelObject which size is a member of.
The compiler error I get is:
C:Program Files (x86)ProgrammingProjectsUniversityprg_interactivesnakey_takeysrc..inc..incPlayer.hpp|17|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
C:Program Files (x86)ProgrammingProjectsUniversityprg_interactivesnakey_takeysrc..inc..inc..incPlayer.hpp|17|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
[Code] .....
However I do invoke the copy constructor when I pass a variable of type size to the constructor in this line:
size_ = Size(s);
But the problem is that its complaining that the abstract class LevelObject doesn't invoke the constructor, which it shouldn't.
View 2 Replies
View Related
Jun 22, 2012
I have an abstract class called Mbase and from it derived two classes: Sparse and Dense. Now I have an array in which its elements can be either Sparse or Dense. So, I delcared the array to have pointers to Mbase class. For example:
PHP Code:
Mbase** A;
Sparse* A1 = new Sparse;
Dense* A2 = new Dense;
A[1] = dynamic_cast<Mbase*>(A1);
A[2] = dynamic_cast<Mbase*>(A2);
Now, I have operator + defined in Sparse and Dense. but when I do
PHP Code:
A[1]+A[2]
I get that operator + is not defined for Mbase class. So, I tried to define it in the Mbase class
PHP Code:
class Mbase{
public:
void put()=0;
double get()=0;
Mbase operator +(Mbase A);
}
However, the last code does not compile complaining that it cannot declare a class of type abstract in Mbase operator +(Mbase A). I think this is because I am returning Mbase instance.
View 10 Replies
View Related
Nov 15, 2014
I have an abstract class named Terrain, and a class named RoadMap, which supposed to hold an N*N array of Terrains. But I'm not sure what type should the RoadMap class hold:
Code:
#ifndef TERRAIN_H
#define TERRAIN_H
class Terrain {
[Code] ....
I can't use an array of refernces here, so I tried this:
Code: Terrain** terrain; and then I thought this was the way to go:
Code: Terrain (*terrain)[]; But now I'm not sure.
The N*N matrix size supposed to be determined according to a given input... What type should I use there?
View 2 Replies
View Related
Jul 27, 2012
As i have one Abstract base class say MyBase.
It have parameterized constructor with string value it have abstract method call.And I also have One child class say MyChild.
It does not have any constructor only one have public method and i want to call that parameterized constructor of base class onto child class.
View 1 Replies
View Related
Oct 2, 2013
Imagine if there is an abstract class with a method (say output or print) which would be inherited by a few other classes. Later objects are created using the inherited classes, and the user wishes to call the above method twice, for eg (i) output/print to screen and (ii) output/print to a file. What is the best way to achieve that.
View 6 Replies
View Related
Feb 27, 2014
I'm trying to implement a decision tree that gets doubles as input (in this sample code just random numbers) and returns a boolean value. At the nodes, I'd like to use various operators that can have different input and return types. I've implemented an abstract base class for the nodes and I'm deriving the specific nodes from it. In the code below, I've included only a few derived classes. Building the tree (randomly) is no problem. However, I'm looking for a clever way to evaluate the tree. I think that uncommenting the lines in bold print would in principle do it. However, this is not possible because "value" is not a member of the base class. The type of "value" is different in the derived classes, so I cannot simply declare it in the base class.
"Node.h"
#pragma once
class NodeBase{
public:
NodeBase* Child_1;
NodeBase* Child_2;
virtual void evaluate() = 0;
[Code] ....
View 4 Replies
View Related
Dec 3, 2014
A have two classes, one inheriting the other, and the parent class being abstract (I plan on adding more child classes in the future). For reasons I won't bother mentioning, I'm making use of an STL container as a way for me to access all of the child objects in the heap. I've done so by making use of a map, with key type int and value type being a pointer to the parent class:
//PARENT.H
class Parent {
protected:
static int n;
static std::map<int, Parent*> map;
public:
virtual void pureVirtual() = 0;
[code]....
The Problem:In line 5 of Parent.cpp, initializing the value of the element to new Child won't work, as according to the compiler, the Child class hasn't been declared yet, and including Child.h into the Parent.h only opens an even bigger can of worms.I also can't initialize it as new Parent, seeing as the parent class is an abstract one.
The Question:Is there a way I can initialize the static map properly. Making the Parent class abstract is not an option.
View 3 Replies
View Related
Jul 11, 2012
For example, in a header file A.h, I define an abstract class,
Code:
// A.h
class A {
public:
virtual void foo() = 0;
private:
static int _x;
};
How'd I initialize static member data _x?Normally, we initialize a static member data in a cpp file. However, there is not cpp file for A.h. If I intialize _x in header file, there will be linker errors like mulitple defined symbols. What is appropriate way to do that?
View 4 Replies
View Related
Mar 6, 2014
The abstract class can provide more functionality without affecting child classes.If we add any method to the interface ,then will it affect all the child classes ?
View 2 Replies
View Related
Dec 17, 2012
Is there a way in either Visual Studio 2010 or g++ (any version) to see what classes it instantiates and their code? For example to see if i avoid code bloat when i explicitly instantiate a template for certain types.
View 3 Replies
View Related
Jan 12, 2014
I am writing a program that aims to be cross-platform, so it supports multiple low-level implementations for certain operations. My initial approach is to write an abstract class to use as an interface, and inherit from that when writing specific implementations.
However, I realized that the specific implementation that I will be using is known at compile-time, and I to not need any polymorphic behaviour. I realized that I could just write this:
Code:
class Impl1 {};
#ifdef USING_IMPL1
typedef Impl1 Interf;
#endif
Clients would then go on using the Interf type, regardless of the underlying implementation. The only drawback that I can see is that my Implementation classes are not forced to conform to an interface, but the compiler will tell me anyway if I try to use, in my client code, a method that is not defined.
View 3 Replies
View Related
Mar 5, 2015
.Theoretically speaking, we cannot create object of abstract class and even return an instance of it. But according to msdn documentation, WebRequest request = WebRequest.Create("Uri here");. In other word, with this statement, the create method return an instance of the WebRequest class, which is the abstract class.
As far as abstract class is concerned, there is no way for us to return an instance of the derived class within the abstract class or superclass, within the method of abstract class in particular. Since the abstract class knows nothing about the derived class. Unless the method is implemented within the derived class. Here is the statement HttpWebRequest request = (HttpWebRequest) WebRequest.Create("Uri here");
View 14 Replies
View Related
Feb 28, 2013
coming from Java, my experience with the Classes in C++ is quite limited.
Thats why I am having trouble converting the following (simple!) Java-Program.
Most examples with linked lists I found on the web describe how to implement the LinkedList class itself. But my problem is different: I want to use such a Class (I have a LinkedList class available on my system which is presumably OK).
Code: package main;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
BoxList<String> sl = new BoxList<String>(
new ArrayList<ABox<String>>());
sl.getList().add(
new BoxPair2<String>(new BoxPair2<String>(
[code].....
View 10 Replies
View Related
Jan 26, 2013
when I should use pure virtual functions.On the one hand, "TOY" for example should be an abstract class since theres no such thing as "TOY" , there are "toy cars", "toy fighters" etc , but on the other hand I need to force it somehow to be abstract since theres no really a function that any toy should have and implement on his own way (except PRINT maybe).
when I should REALLY use pure virtual functions? And if I want to avoid people from creating TOY objects (for example), the only way is PURE virtual functions. right?
View 4 Replies
View Related
May 6, 2014
The code below runs correctly (feel free to compile and run it yourself to see what it does). But when I turn Object abstract by uncommenting the line
virtual void foo() = 0;
It obviously won't compile. I want to use a copy constructor rather than restoring one data member at a time because I'm assuming that Object will have many, many data members (and also want to avoid extra responsibility when new data members are added to Object). Of course, using a pointer to Object in Memento will defeat the purpose of taking a snapshot.
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
const std::string NAME = "Object";
[Code] .....
View 9 Replies
View Related
Jul 3, 2014
There are two ways to access the members of class A inside class B:
1) Making an instance of class A in class B
2) Deriving class B from class A
So what is the basic difference in both ways as we can do same kind of work with both ways?
View 1 Replies
View Related
Jan 21, 2013
The case is like
class B{
public:
somedata;
somefunction();
}
class A{
public:
data;
function();
}
in somefunction i want a pointer to current object of class A m new to c++
View 2 Replies
View Related
Mar 30, 2013
Say I have 3 classes:
class Player {
public:
virtual func1();
[code]....
Say in my main class, I have a function fight(Player p1, Player p2) and I would like to do something like this in the fight function, given that p1 is the human and p2 is the computer:
//function fight()
fight(Player p1, Player p2) {
p1.func2();
}
//using function fight()
fight(human, computer);
When I compile the program, I got this: error: ‘class Player’ has no member named 'func2()' What can I do to allow p1 to call func2 inside fight()? I'm not allowed to use pointers as the parameter for fight() and have to use the signature fight(Player p1, Player p2).
View 6 Replies
View Related
Jan 21, 2014
The compiler creates virtual table for the base class and also for the derived class whether we override it or not.
That means each class has separate virtual table. when we get the size of the each class with out any data members... the size of base is -- 4 bytes(64 bit) and the size of derived is -- 1
The size of base class 4 is correct since it creates the virtual pointer internally and its size is member data + virtual pointer, but it in this case I have included any data members so it has given 4 byts.
But why in case of derived is 1 byte, since it the derived class has overridden the virtual function from base, this will also contains the virtual pointer which will be pointing to derived class Vtable, it the size of the class suppose to be 4 instead of 1 byte.
#include<iostream>
class A{
public:
[Code].....
View 1 Replies
View Related