Code: Error1error LNK2019: unresolved external symbol "public: __thiscall ReachTop<class Character>::ReachTop<class Character>(class Character *)" (??0?$ReachTop@VCharacter@@@@QAE@PAVCharacter@@@Z) referenced in function "void __cdecl `dynamic initializer for 'gReachTop''(void)" (??__EgReachTop@@YAXXZ)Main.objDecisionTest
I am currently having an issue with a piece of code that I am writing in which I need to use a vector of a child class as a parameter in a function in the parent class. Below is an example of my code:
#include "child.h" #include <vector> class parent { parent(); function(std::vector<child> children); // rest of class here }
When I do this my program doesn't compile. However if I try to forward declare, as shown in the following example, it once again refuses to compile:
#include <vector> class child; class parent{ parent(); function(std::vector<child> children); // rest of class here }
This time, it refuses to compile because it needs to know the full size of the class child in order to create the vector. How to being able to access the child is essential for my program, so what should I do?
I am facing a real-life problem, it can be simplified as below:
#include <iostream> using namespace std; class B; class A { public: void f1(A a) {} void f2(B b) {}
[Code]...
There is no problem at all with the f1(), it compiles and executes without any problem. But f2() gives compilation error. How to solve this?
The error message is: error: 'b' has incomplete type This is just to define the function f2() in a class, that uses an instance of its child class as one of its arguments.
Below is simplified code consists of two classes, namely Parent and Child.
Child is inherited from Parent.
All member functions of class Parent are declared virtual, and they have been overridden in the class Child.
Code 1:
#include <cstdlib> #include <iostream> using namespace std; #define QUANTITY 5 class Parent {
[Code] ....
The output of the code:
Child::showID() -- ID is 1804289383 Child::showID() -- ID is 846930886 Child::showID() -- ID is 1681692777 Child::showID() -- ID is 1714636915 Child::showID() -- ID is 1957747793
Parent::operator=() invoked.
Child::showID() -- ID is 1804289383 Child::showID() -- ID is 846930886 Child::showID() -- ID is 1714636915 Child::showID() -- ID is 1714636915 Child::showID() -- ID is 1957747793
Question:
Why is Parent::operator= invoked instead of Child::operator= ..?
Isn't it already declared virtual and hence would be overridden..?
I need to invoke Child::operator= instead. How to achieve this?
I am doing C++ data structures exercises, and I am still learning some of the more basic concepts. I have a parent class:
template<class T> class linkedListType { public: protected: int count; nodeType<T> *first; nodeType<T> *last; private: };
Derived class:
#include "linkedListType.h" template<class T> class orderedLinkedList: public linkedListType<T> { public: void mergeList(orderedLinkedList<T> &list1, orderedLinkedList<t> &list2) { first = list1.first; ... } private: };
There is more code in my mergeList() function, but I included the line that is giving me problems. The error that my CodeBlocks compiler is giving me is that 'first' was not declared in this scope.
Strangely enough, if I change it to this->first, the error disappears.
1. Why does it not recognise 'first'? 2. Why would this->first work at all? Is the 'this' object a smart pointer?
In my program, I create controls by deriving base objects of them I've made. These controls are then are attached within the OnCreate() function via a method I've created. For example:
Code: class tChat: public TextBox { public: void OnKeyDown(UINT &KeyCode) { if (KeyCode == VK_RETURN) { MessageBox(NULL, "Pressed enter!", NULL, 0); [Code] ....
The use of AddControl() feels quite redundant and is only their to parse a pointer to txtChat's Parent. I'm trying to see if it's possible to remove this line and automatically associate txtChat to fMain.
The user can then derive the Form and Controls and use their virtual OnEVENT functions to handle all the messages they expose.
So far my first concept is using the order-of-creation based on base-class constructor's being fired to determine which object is associated with what.
If I create a copy of a class (i.e. a Form-derived object), first the Form's constructor is fired, and then the constructor's of any class-based member-variables are fired. Is this a safe assumption? I imagine the only time this could be affected is by another thread creating the object of a Form or Control derivative?
If this assumption is true, I could save the 'this' pointer from the FormBase constructor, and then associate it with each Control via the base Control class' constructor? Then to ensure thread-safety, I could map the current FormBase pointer to the local thread id to ensure no conflict if multiply threads are creating forms at the same time?
I've created some mock-up code before trying to implement this into my main code. The following keeps track of the current Form being created by using a ThreadId-based map. When a control is created it gets the FormBase pointer based of it's ThreadId calling. The control then calls an Attach() function of it's parent Form using the pointer it just got, and parses a pointer to the control. The Form then adds the control's pointer to a list. When the Form eventually parses WM_CREATE, it automatically pulls the controls from the list and fires their virtual Create() functions to build them.
Mock-up:
Code: #include <Windows.h> #include <string> #include <map> #include <list> class FormBase;// Forward declaration class FormMap;// Forward declaration class Object {};// Base Object
[Code] ....
Is this plausible to use? I imagine C++ does not have many "guarantees" about how it creates objects and when. But I thought it would be safe that it would never create member-variables before the class of them is first created?
I am making a very basic parent/child class based program that shows polymorphism. It does not compile due to a few syntax errors reading "function call missing argument list. Lines 76 and 77, 81 and 82, and 86 and 87.
#include<iostream> using namespace std; class people { public: virtual void height(double h) = 0; virtual void weight(double w) = 0;
I am having trouble creating a new User from my User Class. The error I am recieving:
Error3'HospitalSystemBL.User' does not contain a constructor that takes 2 argumentsC:UsersStudentdocumentsvisual studio 2010ProjectsHospitalSystemHospitalSystemLogin.aspx.cs2131HospitalSystem
In my User class, I have two constructors. Default and an overloaded constructor.
//default constructor public User() { } //overloaded public User(long UserName, string Password)
[Code] ....
I am trying to create my user in my Login class. Why is the error saying "does not contain a constructor that takes 2 arguments" when I have a constructor (above), User passing two arguments: UserName and Password? Here is my code for the login:
when vpStatus is nonsense and unknown, the vaporPressure should not have a value; and if I calculate out a value for vaporPressure, the vpStatus can be set as known.
I am wondering if there is any set, pair or other structure can hold this two members together, so that when I change one's value, the other guy will also change accordingly.
Define a class for a type called CounterType. An object of this type is used to count things, so it records a count that is a non-negative whole number.
Include a mutator function that sets the counter to a count given as an argument. Include member functions to increase the count by one and to decrease the count by one. Be sure that no member function allows the value of the counter to become negative.Also, include a member function that returns the current count value and one that outputs the count. Embed your class definition in a test program and run sufficient tests to verify it all works correctly.
it seems that I cannot define a method of an inner nested class if it is a private class. for example:
class outter { class nested { void foo ( void ) {} // okay - but is this inline? } void inner::foo( void ) {} // not okay - cannot define inside another class } void outter::inner::foo( void ) {} // not okay - 'nested' class is private!
what I want to know is, is there another way to define an inner class's method? and if not, is it eternally doomed to be inline because it has to be declared inside it's own class declaration?
The exercise is : Define a class Arc, which draws a part of an ellipse.
Hint: fl_arc()
And the body of the class ellipse is as follows in the book (PPP):
struct Ellipse :Shape { Ellipse(Point p, int w, int h); //center, max and min distance from center void draw_lines()const; Point center()const; Point focus1()const; Point focus2()const;
[Code] ....
And the fl_arc() probably is part of FLTK which I've installed it on my machine.
Now the problem here is that while I don't can see the full version of the body of the ellipse how to do this exercise?
Define a class for a type called CounterType. An object of this type is used to count things, so it records a count that is a non-negative whole number.
Include a mutator function that sets the counter to a count given as an argument. Include member functions to increase the count by one and to decrease the count by one.
Be sure that no member function allows the value of the counter to become negative.
Also, include a member function that returns the current count value and one that outputs the count. Embed your class definition in a test program and run sufficient tests to verify it all works correctly.
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?
Based on the arguments passed to foo, the compiler can deduct the type T. But on the other hand, when we use a class template, we always need to specify the type, for example,
Code: template<class T> struct sum { static void foo(T t1, T t2) { } }; sum<int>::foo(1,3);
Here we can't call sum::foo(1,3), otherwise we get compiler errors. My question is why the compiler can't deduct the type based on the arguments passed to foo? In addition, if we call function template foo like this,
Code: foo(1, '3');
Then we get compiler errors. We need to specify the type like foo<int>(1.'3'). Since '3' can be always treated as integer, why we need to specify the type here?
I have in the past written code for templated functions where one function argument can be either a function pointer or a Functor. Works pretty straightforward.
Now I am in a situation where I am actually trying to pass a function pointer as template argument to a class. Unfortunately this does not work, I can pass the Functor class but not the function pointer. Below code illustrates the issue:
The idea is to have the definition of the Record class simple and readable and have a maintainable way to add auto-conversion functions to the class. So the lines I commented out are the desirable way how I want my code to look. Unfortunately I could not come up with any way that was close to readable for solving this.
Hey I am trying to use the getline() function to read a line from a file. For some reason Visual Studio 2010 gives me the following error. "No instance of overloaded function "getline" matches the argument list". The piece of code that produces the error is in a class in a separate .h file and is executed as a method of the object. I'm almost certain it has something to do with either the compiler thinking I am calling another getline in a different namespace or my parameters for the function are incorrect. Here is the code:
Code: #include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; class InsultGenerator