我正在开发一个小程序.我使用Qt作为GUI.我有2个表格/课程.MainWindow和AddProductDialog.
std::string在我们两个都需要一个变量(确切地说是一个).我需要在AddProductDialog(例如std::string decl = "";)的事件中定义它,我需要在我的MainWindow的函数中使用它的值.
我以为我可以将这个变量放在一个头文件中,每个头文件都包含但显然它不起作用.
现在它有效,但我认为这不是一个好的风格.我在main.cpp中声明并定义了它.
main.cpp:
//includes ...
...
std::string descr; //The variable I need
int main(){ /* blah blah */ }
Run Code Online (Sandbox Code Playgroud)
MainWindow.cpp:
void MainWindow::on_AddProductOptions_clicked()
{
extern std::string descr;
AddProductDialog *adp = new AddProductDialog(this);
adp->setModal(true);
if(adp->exec() == QDialog::Accepted)
_Description = descr; //_Description is a private variable of my MainWindow Class
}
Run Code Online (Sandbox Code Playgroud)
AddProduct.cpp
void AddProductDialog::on_cmdOkay_clicked()
{
extern std::string descr;
descr = "";
done(QDialog::Accepted);
}
Run Code Online (Sandbox Code Playgroud)
这当然是有效的.但是有没有办法在标题中声明这个变量并包含它以便我可以使用它?
我一开始尝试过类似的东西,但总是会导致错误:
头
//include guard
extern std::string descr;
//include guard
Run Code Online (Sandbox Code Playgroud)
主窗口
//include header
//...
std::string descr = "";
//...
Run Code Online (Sandbox Code Playgroud)
addproductdialog
//include header
//...
extern std::string descr;
descr = "whatever";
Run Code Online (Sandbox Code Playgroud)
在我的指南中,您严格禁止在实现文件中使用extern声明.在功能块或命名空间范围内.
Externs必须出现在客户端包含的.h文件和定义它的文件中.这样可以更容易地发现类型或属性的差异.当您将冗余限制为单个实例时,还可以更轻松地进行维护.
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |