I am trying to create a class in seperate files with private variables. So far my classes code is:
In TestClass.h
#ifndef TESTCLASS_H
#define TESTCLASS_H
#include <string>
using namespace std;
class TestClass
{
private:
string hi;
public:
TestClass(string x);
void set(string x);
void print(int x);
};
#endif
In TestClass.cpp
#include "TestClass.h"
#include <iostream>
#include <string>
using namespace std;
TestClass::TestClass(string x)
{
cout << "constuct " << x << endl;
}
void set(string x){
hi = x;
}
void print(int x){
if(x == 2)
cout << hi << " x = two\n";
else if(x < -10)
cout << hi << " x < -10\n";
else if(x >= 10)
cout << hi << " x >= 10\n";
else
cout << hi << " x = " << x << endl;
}
When I try to build in Code::Blocks it says:
But when I run it (and don't build it) everything is working.
You forgot to write TestClass::
as shown below:
void TestClass::set(string x)
//^^^^^^^^^^^this
void TestClass::print(int x)
//^^^^^^^^^^^this
That is necessary so that compiler can know that set
and print
are member functions of class TestClass
. And once you write it, making them member functions, they can acess the private members of the class.
Also, without TestClass:: , set
and print
function would become free functions.
Use
void TestClass::set(string x){
and
void TestClass::print(int x){
In your .cpp
file, you need to make the set and print member functions explicitly part of the class, like:
void TestClass::set(string x){
hi = x;
}
void TestClass::print(int x){
if(x == 2)
cout << hi << " x = two\n";
else if(x < -10)
cout << hi << " x < -10\n";
else if(x >= 10)
cout << hi << " x >= 10\n";
else
cout << hi << " x = " << x << endl;
}
You don't scope resolve your print
and set
functions with the class name.
void TestClass::set(string x){
hi = x;
}
void TestClass::print(int x){
if(x == 2)
cout << hi << " x = two\n";
else if(x < -10)
cout << hi << " x < -10\n";
else if(x >= 10)
cout << hi << " x >= 10\n";
else
cout << hi << " x = " << x << endl;
}
say
void TestClass::set(string x){
instead of
void set(string x){
same for print(). You declared them as global functions instead of member functions of TestClass.
Your methods are not defined as methods of the class. Try using TestClass::set and TestClass::print.
-void set(string x) {
+void TestClass:set(string x) {
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.