谈判不起作用
Negoteation not working
我不能给你们看所有的代码,因为它太大了但是我可以给你们看一些我想用的例子。因此,代码如下:
namespace TestNamespace {
struct TestBase
{
TestBase(std::string _id = "") : id(_id) {}
std::string id;
};
struct Test : public TestBase
{
Test(std::string _id = "") : TestBase(_id), b1(true), b2(true) {}
bool b1;
bool b2;
};
typedef std::list<Test> Tests;
struct SomeStatesHolder
{
SomeStatesHolder() : tests(), someAdditionalVar(true), someAdditionVar2(2222) {}
Tests tests;
bool someAdditionalVar;
int someAdditionVar2;
};
}
class WorkingClass
{
public:
WorkingClass() : m_someStatesHolder(new TestNamespace::SomeStatesHolder()) {
TestNamespace::Test t("id1");
m_someStatesHolder->tests.push_back(t);
}
TestNamespace::Tests getTests() const { return m_someStatesHolder->tests; }
bool getB1(const std::string& id) const {
const auto fnd = std::find_if(m_someStatesHolder->tests.cbegin(), m_someStatesHolder->tests.cend(), [&](const TestNamespace::Test& t){
return t.id == id;
});
return (fnd == m_someStatesHolder->tests.cend()) ? true : fnd->b1;
}
bool getB2(const std::string& id) const {
const auto fnd = std::find_if(m_someStatesHolder->tests.cbegin(), m_someStatesHolder->tests.cend(), [&](const TestNamespace::Test& t){
return t.id == id;
});
return (fnd == m_someStatesHolder->tests.cend()) ? true : fnd->b2;
}
private:
TestNamespace::SomeStatesHolder *m_someStatesHolder;
};
但是在项目的深处,在另一个类的函数中,我有这样的行:
qDebug() << "nnnnTESTS: "
<< workingClass.getB1("id1") << ":" << !workingClass.getB1("id1") << " "
<< workingClass.getB2("id1") << ":" << !workingClass.getB2("id1");
const auto tests = workingClass.getTests();
const std::string fid = "id1";
const auto fnd = std::find_if(tests.cbegin(), tests.cend(), [&](const TestNamespace::Test& t){
return t.id == fid;
});
qDebug() << "nTESTS2: "
<< fnd->b1 << ":" << !fnd->b1 << " "
<< fnd->b2 << ":" << !fnd->b2;
那几行的输出是:
TESTS: true : true true : true
TESTS2: true : true true : true
这种奇怪行为的原因是什么?为什么 !不工作?我应该承认,
这个奇怪的是在Linux, OSX。Windows一切都很好
新的类似的测试东西工作得很好(像这样),但我在项目中的特定结构-不是。
UPD1:我还试图使函数获得这些值,结果相同。像这样的代码也不工作:
qDebug() << "Test3: "
<< workingClass.getB1("id1") << ":"
<< !((bool)workingClass.getB1("id1")) << ":"
<< !workingClass.getB1("id1") << ":"
<< (!(workingClass.getB1("id1")))
bool AAAAA = workingClass.getB1("id1");
qDebug() << "Test4: "
<< AAAAA << ":"
<< !((bool)AAAAA)) << ":"
<< !AAAAA << ":"
<< (!(AAAAA))
std::find_if
将返回last
,如果没有找到,它指向在最后一个元素std::list
之后。这是内存垃圾,您将使用return fnd->b1
返回。
当你对这个内存垃圾求反时,最后一位将被求反,因此当你将其强制转换为int时,你最终得到112: 113 58: 59。
我发现一个问题。在我的项目中,在同一个类(SomeStatesHolder)中,我的bool值没有在构造函数列表中初始化。
ps:使用damn -Wreorder或者更好的-Werror -Wall
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- 为什么这段代码不起作用,我该如何解决?
- 谈判不起作用