更新对象引用的值
Update the value of object reference
我有一个功能如下。我试图通过使用 dir = Directory(path);
将对象引用的值更改为新对象,但出现如下编译错误。有什么建议吗?这也是一个很好的方法吗?
Error C2280 'Directory &Directory::operator =(const Directory &)': attempting to reference a deleted function
class Directory
{
public:
const fs::path path;
Directory *parent;
std::vector<Directory *> sub_dir;
std::vector<File *> files;
Directory(const fs::path path, Directory *parent = NULL);
double const deltaBase = .001;
Directory(const Directory&) = default;
Directory& operator=(const Directory&) = default;
std::string getDirName(void);
};
void create_imgui_window(ImGui::FileBrowser *fileDialog, const char *label, char path[MAX_PATH_LENGTH], Directory &dir)
{
// (optional) set browser properties
fileDialog->SetTitle("Browse");
ImGui::Begin(label);
IMGUI_LEFT_LABEL(ImGui::InputText, "Path", path, MAX_PATH_LENGTH);
if (ImGui::IsItemHovered() && path[0])
ImGui::SetTooltip(path);
ImGui::SameLine();
if (ImGui::Button("Browse"))
fileDialog->Open();
create_directory_tree(dir);
ImGui::End();
fileDialog->Display();
if (fileDialog->HasSelected())
{
strcpy_s(path, MAX_PATH_LENGTH, fileDialog->GetSelected().string().c_str());
std::cout << "Selected directory: " << path << std::endl;
dir = Directory(path);
fileDialog->ClearSelected();
}
}
最终答案:删除 fs::path path;
上的常量
class Directory
{
public:
fs::path path;
Directory *parent;
std::vector<Directory *> sub_dir;
std::vector<File *> files;
Directory(const fs::path path, Directory *parent = NULL);
Directory& operator=(const Directory&) = default;
std::string getDirName(void);
};
您要求隐式定义您的复制赋值运算符:
Directory& operator=(const Directory&) = default;
同时你有 const
个数据成员:
const fs::path path; // Consider omitting the const here
const double deltaBase = .001; // Seems like a candidate for a static member
合成的(隐式定义)复制赋值运算符defined as deleted如果class有一个数据成员是const
或引用 (或者如果 class 有一个数据成员,该成员本身有一个已删除或不可访问的复制赋值运算符).
考虑两种方法:
- 非
const
path
数据成员,以及 deltaBase
不是每个 Directory
实例中的 const
。
- 将
create_imgui_window
函数变为 return 一个 Directory
,而不是修改一个。
我有一个功能如下。我试图通过使用 dir = Directory(path);
将对象引用的值更改为新对象,但出现如下编译错误。有什么建议吗?这也是一个很好的方法吗?
Error C2280 'Directory &Directory::operator =(const Directory &)': attempting to reference a deleted function
class Directory
{
public:
const fs::path path;
Directory *parent;
std::vector<Directory *> sub_dir;
std::vector<File *> files;
Directory(const fs::path path, Directory *parent = NULL);
double const deltaBase = .001;
Directory(const Directory&) = default;
Directory& operator=(const Directory&) = default;
std::string getDirName(void);
};
void create_imgui_window(ImGui::FileBrowser *fileDialog, const char *label, char path[MAX_PATH_LENGTH], Directory &dir)
{
// (optional) set browser properties
fileDialog->SetTitle("Browse");
ImGui::Begin(label);
IMGUI_LEFT_LABEL(ImGui::InputText, "Path", path, MAX_PATH_LENGTH);
if (ImGui::IsItemHovered() && path[0])
ImGui::SetTooltip(path);
ImGui::SameLine();
if (ImGui::Button("Browse"))
fileDialog->Open();
create_directory_tree(dir);
ImGui::End();
fileDialog->Display();
if (fileDialog->HasSelected())
{
strcpy_s(path, MAX_PATH_LENGTH, fileDialog->GetSelected().string().c_str());
std::cout << "Selected directory: " << path << std::endl;
dir = Directory(path);
fileDialog->ClearSelected();
}
}
最终答案:删除 fs::path path;
class Directory
{
public:
fs::path path;
Directory *parent;
std::vector<Directory *> sub_dir;
std::vector<File *> files;
Directory(const fs::path path, Directory *parent = NULL);
Directory& operator=(const Directory&) = default;
std::string getDirName(void);
};
您要求隐式定义您的复制赋值运算符:
Directory& operator=(const Directory&) = default;
同时你有 const
个数据成员:
const fs::path path; // Consider omitting the const here
const double deltaBase = .001; // Seems like a candidate for a static member
合成的(隐式定义)复制赋值运算符defined as deleted如果class有一个数据成员是const
或引用 (或者如果 class 有一个数据成员,该成员本身有一个已删除或不可访问的复制赋值运算符).
考虑两种方法:
- 非
const
path
数据成员,以及deltaBase
不是每个Directory
实例中的const
。 - 将
create_imgui_window
函数变为 return 一个Directory
,而不是修改一个。