• 0

[C++] How to Create Instance of another class?


Question

I am new to C++, and I am making a simple RPG game. I have an 'Item' class, which has properties and methods that all items will have. I need to be able to:

a) Inherit from this class to make a class with the item properties and methods, along with new ones

b) Make a new instance of this class in my main class. For example in vb.net:

Class MainClass

dim sword as new ItemClass

End Class

I have tried the following in C++:

new ItemClass sword;

However this gives me the error:

error C2061: syntax error : identifier 'ItemClass'

so it isn't recognising the other class? Thanks for any help :)

6 answers to this question

Recommended Posts

  • 0
it is more like

ItemClass *sword;

sword = new ItemClass();

Thanks, but I still get the same errors (plus errors saying 'sword' is an undeclared identifier)

The Item.h file is in the same projet, but do I need to reference it in any way at the start of my main class file? (and the code is meant to be in th .h rather than the .cpp file right?) Or when I created this file/ object, what type should I have chosen? (C++ class, or just C++ file?)

Also, for the sake of gaining a better understanding, what does the asterix * mean?

Thanks again

  • 0

To create a new instance of a class, you do this:

MyClass NewClassInstance;

If you want to create more than one, you can do this:

MyClass *NewClassInstances = new MyClass[500];

You can essentially treat classes as if they were ints or floats, similar syntax.

In your case, you have created a base item class. You said you wanted to inherit from it in order to create new items. I'm not sure if what you said is what you meant to do, but I'll show you a quick example of what that would be:

//This is your base item class
class Item {

int cost;
char[50] name;
int arbitraryValue;
// etc.

}

class HealingItem : public Item {

// Inherits from Item, can be used just like Item

}

Now when you do this, you can do something rather nifty.

Since all HealingItem's inherit from BaseItem, you can actually use them as such. Here's an example:

Item *MyItem = new HealingItem;

This may seem a bit odd, but in your game you may want to loop through all of the items and rather than having a separate loop for each item type, you can have all of them in one big Item array.

I hope that helps =)

EDIT: The * denotes a pointer. If you haven't looked at C++ pointers yet, I strongly recommend you go do this now as they are very very important.

  • 0

About creating instances, note that how you do it depends on if you want to create it on the stack or the heap.

If you create it on the heap, that would be the object* obj = new object(); syntax or object* obj = new object("123") if its constructor took some arguments. If it's rather on the stack (this is pretty common to do too), then it's instead simply object obj; or object obj("123"); if it had a constructor taking some arguments.

Things on the heap needs to be explicitly freed by you at a later point with delete obj;. Creating object instances on the heap is therefore useful if you want to at a later point (like in another function, or to set an object's state as a member variable) access the object, because the compiler won't automatically free it. Creating object instances on the stack make them automatically be freed at the exit of the function they were created in, or the class they were created in, in case of a member variable.

If you create it on the heap, you get a pointer reference to it, and can interact with the object either by typing obj->someFunction(); or by using the "*" dereferencing operator for something like (*obj).someFunction;.

Note that "*" can mean both "this type is a pointer" and "dereference this pointer" depending on how it's used. obj* pointer; is a declaration of a pointer named "pointer", and int i = *pointerToInt; is dereferencing the pointer "pointerToInt" to retrieve the int value it points to and store it in the variable "i".

This "duality" detail puzzled me with C++ for way too long. :p The "->" operator was invented as "syntactic sugar" in C++ so you won't have to do like the ugly above with (*obj).someFunction and it's rarely used like that.

If you create it on the stack, you however don't have a pointer to the object, but can interact with it directly. So then you would instead type obj.someFunction();

Allocating things on the stack is typically faster than allocating on the heap, so it's recommended to do that instead of creating stuff on the heap if you only need to use the variable in a function anyway.

Edited by Jugalator
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Couple years ago I got a brand new 4TB Samsung 990 Pro for $250 during Black Friday
    • Thanks
    • Can confirm, I've built stuff for others and no complaints using their products.
    • Yes I agree, it's annoying. You can now miss tabs unless you point low enough.
    • Sysinternals Suite 2026.17.06 by Razvan Serea The Sysinternals Suite is a comprehensive package of advanced Windows utilities created by Mark Russinovich, who launched the Sysinternals website in 1996 to share his system tools and technical resources. This suite combines a wide range of troubleshooting and diagnostic tools, including Process Explorer, Process Monitor, Sysmon, Autoruns, ProcDump, the PsTools collection, and many others. It provides everything IT professionals and developers need to manage, monitor, and troubleshoot Windows systems and applications. The Suite bundles all of the core troubleshooting utilities along with their help files. Non-troubleshooting extras—such as the BSOD Screen Saver or NotMyFault—are excluded. In addition to the well-known tools, it also includes AccessChk, Autologon, Ctrl2Cap, DiskView, Disk Usage (DU), LogonSessions, PageDefrag, PsLogList, PsPasswd, RegMon, RootkitRevealer, TCPView, VMMap, ZoomIt, and more. Sysinternals Suite 2026.17.06 changelog: Autoruns v14.3 - This update to Autoruns, a utility for monitoring startup items, adds bug fixes and improves the command-line application autorunsc. ZoomIt v12.1 - This update to ZoomIt, a screen magnification and annotation tool, adds image backgrounds, webcam background blur and microphone noise cancellation support. Coreinfo v4.01 - This update to Coreinfo, a tool that reports processor, socket, NUMA memory, and cache topology of a system, as well as processor features supported, adds support for new processor features. DebugView v5.02 - This update to DebugView, a tool for displaying both kernel-mode and Win32 debug output, adds Ctrl-Shift-A support for selecting all output, and agent skills support for the CLI utility. LiveKd v5.64 - This update to LiveKd, a utility that allows running the kernel debugger on a live system, fixes a debugging privileges issue. ProcDump 3.5.2 for Linux - This update to ProcDump for Linux, a tool for capturing process dumps, adds .NET counters and a custom core dumper. Process Monitor v4.04 - This update to Process Monitor, a utility for observing real-time file system, Registry, and process or thread activity, adds some bug fixes Sysmon v15.21 - This update to Sysmon, an advanced host security monitoring tool, adds some bug fixes. Download: Sysinternals Suite 2026.17.06 | 168.0 MB (Freeware) Download: Sysinternals Suite for ARM64 | 15.4 MB Link: Sysinternals Suite Home Page | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Recent Achievements

    • Week One Done
      Classifyskilleducation earned a badge
      Week One Done
    • One Month Later
      eurospharma62 earned a badge
      One Month Later
    • Week One Done
      With What earned a badge
      Week One Done
    • Week One Done
      Harris Gilbert earned a badge
      Week One Done
    • One Month Later
      Vincian earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      542
    2. 2
      +Edouard
      169
    3. 3
      PsYcHoKiLLa
      85
    4. 4
      ATLien_0
      64
    5. 5
      neufuse
      64
  • Tell a friend

    Love Neowin? Tell a friend!