C++ 我可以使用C+;中的函数初始化类成员变量吗+;?如果是,怎么做?
我尝试使用StructureMaker类函数中的函数初始化结构类的成员变量。它给出了错误。有什么问题吗?我不能这样做吗?那怎么办呢 MyMemberNotToInitThroughConstructor.hC++ 我可以使用C+;中的函数初始化类成员变量吗+;?如果是,怎么做?,c++,C++,我尝试使用StructureMaker类函数中的函数初始化结构类的成员变量。它给出了错误。有什么问题吗?我不能这样做吗?那怎么办呢 MyMemberNotToInitThroughConstructor.h #ifndef MYMEMBERNOTTOINITTHROUGHCONSTRUCTOR_H_ #define MYMEMBERNOTTOINITTHROUGHCONSTRUCTOR_H_ namespace my { class MyMemberNotToInitThroughConst
#ifndef MYMEMBERNOTTOINITTHROUGHCONSTRUCTOR_H_
#define MYMEMBERNOTTOINITTHROUGHCONSTRUCTOR_H_
namespace my {
class MyMemberNotToInitThroughConstructor {
public:
MyMemberNotToInitThroughConstructor(int no1);
virtual ~MyMemberNotToInitThroughConstructor();
//private:
int no;
};
} /* namespace my */
#endif /* MYMEMBERNOTTOINITTHROUGHCONSTRUCTOR_H_ */
MyMemberNotToInitThroughConstructor.cpp
#include "MyMemberNotToInitThroughConstructor.h"
namespace my {
MyMemberNotToInitThroughConstructor::MyMemberNotToInitThroughConstructor(int no1) {
no = no1;
}
MyMemberNotToInitThroughConstructor::~MyMemberNotToInitThroughConstructor() {
// TODO Auto-generated destructor stub
}
} /* namespace my */
结构.h
#ifndef STRUCTURE_H_
#define STRUCTURE_H_
#import "MyMemberNotToInitThroughConstructor.h"
namespace my {
class Structure {
public:
Structure();
void setElements1(int id1);
void setElements2(MyMemberNotToInitThroughConstructor* member1);
virtual ~Structure();
//private:
int id;
MyMemberNotToInitThroughConstructor*member;
};
} /* namespace my */
#endif /* STRUCTURE_H_ */
结构.cpp
#include "Structure.h"
namespace my {
Structure::Structure() {
}
void Structure::setElements1(int id1)
{
id = id1;
}
void Structure::setElements2(MyMemberNotToInitThroughConstructor* member1)
{
member = member1;
}
Structure::~Structure() {
// TODO Auto-generated destructor stub
}
} /* namespace my */
StructureMaker.h
#ifndef STRUCTUREMAKER_H_
#define STRUCTUREMAKER_H_
#import "Structure.h";
#import "MyMemberNotToInitThroughConstructor.h"
namespace my {
class StructureMaker {
public:
StructureMaker();
void makeStructure(Structure*st);
void innerMake(Structure*st);
virtual ~StructureMaker();
};
} /* namespace my */
#endif /* STRUCTUREMAKER_H_ */
StructureMaker.cpp
#include "StructureMaker.h"
namespace my {
StructureMaker::StructureMaker() {
// TODO Auto-generated constructor stub
}
void StructureMaker::makeStructure(Structure*st)
{
int id1 = 123;
st->setElements1(id1);
innerMake(st);
}
void StructureMaker::innerMake(Structure*st)
{
int no1 = 987;
MyMemberNotToInitThroughConstructor my(no1);
st->setElements2(&my);
}
StructureMaker::~StructureMaker() {
// TODO Auto-generated destructor stub
}
} /* namespace my */
Test.cc
#include <stdio.h>
#include<iostream>
#include"StructureMaker.h"
#include"Structure.h"
using namespace std;
using namespace my;
int main()
{
StructureMaker stm;
Structure*st;
stm.makeStructure(st);
//cout << st->member->no << endl;
return 0;
}
#包括
#包括
#包括“StructureMaker.h”
#包括“Structure.h”
使用名称空间std;
使用我的名称空间;
int main()
{
StructureMaker stm;
结构*st;
stm.makeStructure(st);
//cout member->no问题在于以下功能:
void StructureMaker::innerMake(Structure*st)
{
int no1 = 987;
MyMemberNotToInitThroughConstructor my(no1);
st->setElements2(&my);
}
my
是函数中的一个局部变量。您正在将st
的成员变量设置为指向该局部变量的指针。一旦该函数返回,指针将无效,如果您试图使用该指针访问其成员变量或调用成员函数,您将遇到未定义的行为territory
最好从堆中分配一个对象并使用它
void StructureMaker::innerMake(Structure*st)
{
int no1 = 987;
st->setElements2(new MyMemberNotToInitThroughConstructor(no1));
}
请记住,Structure
并没有接管管理该指针的职责。您必须确保将内存释放到Structure
中的某个位置。对于这样的类,您需要确保有一个复制构造函数和一个复制赋值操作符,它们能够正确执行操作
建议绝对必须阅读:问题在于以下功能:
void StructureMaker::innerMake(Structure*st)
{
int no1 = 987;
MyMemberNotToInitThroughConstructor my(no1);
st->setElements2(&my);
}
my
是函数中的一个局部变量。您正在将st
的成员变量设置为指向该局部变量的指针。一旦该函数返回,指针将无效,如果您试图使用该指针访问其成员变量或调用成员函数,您将遇到未定义的行为territory
最好从堆中分配一个对象并使用它
void StructureMaker::innerMake(Structure*st)
{
int no1 = 987;
st->setElements2(new MyMemberNotToInitThroughConstructor(no1));
}
请记住,Structure
并没有接管管理该指针的职责。您必须确保将内存释放到Structure
中的某个位置。对于这样的类,您需要确保有一个复制构造函数和一个复制赋值操作符,它们能够正确执行操作
建议绝对必须阅读:您试图实现什么?您遇到的错误是什么?我在eclipse中使用CDT插件。它说只有program.exe停止工作。没有更多信息可用。严格来说,没有。所有成员变量都是在您构造类时初始化的。您只能分配给em.你想实现什么?你遇到了什么错误?我在eclipse中使用CDT插件。它说只有program.exe停止工作。没有更多信息可用。严格地说,没有。所有成员变量都是在你构造类时初始化的。你只能分配给它们。