すべてのコードを表示することはできません。サイズが大きいので、私が使用しようとしているものの例を表示できます。交渉が機能しない
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() << "\n\n\n\nTESTS: "
<< 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
このような奇妙な行動の理由は何でしょうか?なぜ!は機能しませんでしたか?私は
このstrangesが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))
あなたは評価が正しいことを確認するためにいくつかのparanthesisを追加しようとすることはできます:qDebug()<< "\ nTESTS2:" << (fnd-> B1 )<< "": "<< (!(fnd-> b1))" "" << (fnd-> b2) "": "<< (!(fnd-> b2)); –
はい、UPD1を見てください – user2123079
ええと、あなたのqDebugオブジェクトにバグがあります。 linuxで失敗するコード... –