gpt4 book ai didi

c++ - gcc 4.9.2编译错误: AssetLinkData

转载 作者:行者123 更新时间:2023-11-28 04:56:30 26 4
gpt4 key购买 nike

尝试编译下面包含的程序时,出现以下错误。程序中应该修改什么才能成功编译?看起来 GCC 4.9.2 无法将一些 noexcept 移动构造函数实现为“=default”。

导致问题的线路是: AssetLinkData::AssetLinkData(AssetLinkData&& other) noexcept = default;


COMPILATION ERROR: FAILED: obj/browser/asset_link_data.o g++ -MMD -MF (I removed many more flags)

asset_link_data.cc: error: function 'password_manager::AssetLinkData::AssetLinkData(password_manager::AssetLinkData&&)' defaulted on its redeclaration with an exception-specification that differs from the implicit declaration 'password_manager::AssetLinkData::AssetLinkData(password_manager::AssetLinkData&&)' AssetLinkData::AssetLinkData(AssetLinkData&& other) noexcept = default;


源代码:

#include "asset_link_data.h"

#include <algorithm>

#include <utility>

#include "base/json/json_reader.h"

#include "base/json/json_value_converter.h"

#include "base/values.h"

namespace password_manager { namespace {

constexpr char kGetLoginsRelation[] =
"delegate_permission/common.get_login_creds"; constexpr char kWebNamespace[] = "web";

} // namespace

AssetLinkData::AssetLinkData() = default;

AssetLinkData::AssetLinkData(AssetLinkData&& other) noexcept = default;

AssetLinkData::~AssetLinkData() = default; AssetLinkData& AssetLinkData::operator=(AssetLinkData&& other) = default;
} // namespace password_manager

下面我添加了 asset_link_data.h 的内容:

#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_ASSET_LINK_DATA_H_
#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_ASSET_LINK_DATA_H_

#include <string>
#include <vector>

#include "base/macros.h"
#include "url/gurl.h"

namespace password_manager {

// The class parses an asset link file. The spec for the format is
// https://github.com/google/digitalassetlinks/blob/master/well-known/details.md
// The class cares only about two types of statements:
// - includes. Those are just a reference to a file to be loaded and parsed.
// - "get_login_creds" permission to a web page. That means that the target is
// allowed to get the credentials saved for the source.
// Only HTTPS URLs are taken into account.
class AssetLinkData {
public:
AssetLinkData();
AssetLinkData(AssetLinkData&& other) noexcept;
~AssetLinkData();

AssetLinkData& operator=(AssetLinkData&& other);

bool Parse(const std::string& data);

const std::vector<GURL>& includes() const { return includes_; }
const std::vector<GURL>& targets() const { return targets_; }

private:
std::vector<GURL> includes_;
std::vector<GURL> targets_;

DISALLOW_COPY_AND_ASSIGN(AssetLinkData);
};

} // namespace password_manager
#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_SITE_AFFILIATION_ASSET_LINK_DATA_H_

最佳答案

错误信息很清楚:

defaulted on its redeclaration with an exception-specification that differs from the implicit declaration

您已要求编译器继续按其本来的方式定义构造函数,但您要求将构造函数设置为noexcept。 .. 并且默认创建的构造函数不是 noexcept

要解决此问题,您需要删除 noexcept 说明符:

AssetLinkData::AssetLinkData(AssetLinkData&& other) = default;

或者,如果你想要一个 no-except 说明符,你需要用老式的方式手工制作它:

AssetLinkData::AssetLinkData(AssetLinkData&& other) noexcept
: includes_(std::move(other.includes_))
, targets_ (std::move(other.targets_ ))
{}

关于c++ - gcc 4.9.2编译错误: AssetLinkData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47018465/

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