gpt4 book ai didi

c++私有(private)成员变量在另一个函数中未知

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:06 25 4
gpt4 key购买 nike

我有一个关于如何分配类成员(setter)的新手问题。我习惯于编写脚本,大部分是通过(在 python 中)完成的

def set_mymember(mymember):
self.mymeber = mymember

我的同事告诉我 C++ 中不需要“self”和“this”,“this”存在并且在这种情况下并没有错,但是这对我来说很难理解,所以他说我不应该在意。于是我先按照他的建议尝试了一下:

我的类定义:-(它应该创建一个 sql 查询字符串)

class Query
{

public:
Query() { }
~Query() { }

void setoptions( std::string qtext_where="", bool qtext_erl=true, std::vector<std::string> kids=std::vector<std::string>() );
Query build_query( );

void set_db_table( std::string db_table );
void set_db_key( std::string db_key );
void set_m_qtext( std::string m_qtext );
void set_foo( std::string foo );

std::string sql();
std::string get_sql_update();

private:
std::string m_db_table; // Tabellenname
std::string m_db_key; // Tabellen-key

std::string m_qtext_where; // add.optionale where clause
std::string m_qtext; // fertiger SELECT
std::string m_sql_update; // fertiger UPDATE
bool m_erl; // nur erledigte waehlen?
std::vector<std::string> m_kids; // Liste von keys zu selecten
};

这里是 setter 方法之一:我用填充的字符串和 vector 调用它们,在这段代码中仔细检查

void Query::setoptions( string qtext_where, bool erl, vector<string> kids ) {
m_qtext_where = qtext_where;
m_erl = erl;
m_kids = kids;
}

但是当我的应用稍后调用 query.build_query()

变量为空

Query Query::build_query( ) {
cout << "kids size" << m_kids.size() << endl;
cout << "m_qtext_where " << m_qtext_where << endl;
// Query zur auswahl der zu uebertragenden Datensaetze
string sql_update = "UPDATE " + m_db_table;

string qtext = "SELECT * FROM " + m_db_table;
string qtext_order = " ORDER BY " + m_db_key;
(...)

编辑:所以这是调用 1.setoptions 和 2.build_query 的应用程序代码的一部分

       // read file line by line into vector of strings
vector<string> text_file;
ifstream ifs( input );
string temp;
while( getline( ifs, temp ) ) {
if (temp.substr(0,1) == "#" ) {
cout << "COMMENT: " << temp << endl;
continue;
}
cout << temp << endl;
text_file.push_back( temp );
}
// check: yes, vector has a size = number of lines
cout << "text_file size " << text_file.size() << endl;

// create Query object
Query query = Query();
// set the members, bool erl = true
query.setoptions( "", erl, text_file );
// call 2nd method
q2 = query.build_query();

最佳答案

在没有完整代码的情况下无法真正判断发生了什么,但我怀疑您从 query.build_query 返回的查询对象不是查询对象的完整拷贝,如果这有意义的话?你能包括 build_query 的全文吗?

此外,我将使 build_query 方法无效,并且根本不会尝试将新的 Query 对象分配回第二个 Query 对象 (q2)(除非你真的需要,再一次,如果没有完整代码),像这样:

void Query::build_query( ) {
std::cout << "kids size" << m_kids.size() << std::endl;
std::cout << "m_qtext_where " << m_qtext_where << std::endl;
}

main
{
...
Query query = Query();
// set the members, bool erl = true
query.setoptions( "", true, text_file );
// call 2nd method
query.build_query();
}

此外,这里只是迂腐,但鉴于您为所有选项提供默认参数,我倾向于在构造函数中像这样初始化它们:

Query::Query() 
: m_qtext_where("")
, qtext_erl(true)
, kids (std::vector<std::string>()
{}

然后代替 setOptions 方法,为每个单独的变量设置 setter :

void setWhere(std::string qtext_where) {m_qtext_where = qtext_where ;}
void setErl(bool query_erl) { m_erl = query_erl; }
void setKids(std::vector<std::string> kids) { m_kids = kids; }

你只在需要的时候调用..

关于c++私有(private)成员变量在另一个函数中未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6825663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com