Объедините два варианта [дубликат]

Порядок, в котором указаны взаимозависимые связанные библиотеки, неверен.

Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A зависит от библиотеки B, тогда libA ДОЛЖЕН появляться перед libB в флагах компоновщика.

Например:

// B.h
#ifndef B_H
#define B_H

struct B {
    B(int);
    int x;
};

#endif

// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}

// A.h
#include "B.h"

struct A {
    A(int x);
    B b;
};

// A.cpp
#include "A.h"

A::A(int x) : b(x) {}

// main.cpp
#include "A.h"

int main() {
    A a(5);
    return 0;
};

Создайте библиотеки:

$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o 
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o 
ar: creating libB.a
a - B.o

Скомпилируйте:

$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out

Чтобы повторить снова, порядок имеет значение!

16
задан giampaolo 13 February 2014 в 22:50
поделиться

3 ответа

Да, это метод orElse. Он выбирает первое определенное значение или None, если не определено.

scala> Some(1) orElse None
res0: Option[Int] = Some(1)

scala> None orElse Some(1)
res1: Option[Int] = Some(1)

scala> None orElse None
res2: Option[Nothing] = None

scala> Some(1) orElse Some(2)
res3: Option[Int] = Some(1)
40
ответ дан Ben James 31 August 2018 в 10:34
поделиться

В комментариях к вопросу вы указываете, что не можете иметь Some(a) и Some(b), поэтому у вас действительно есть Option[Either[Int,Int]]. В этом случае вы можете использовать x.map(_.merge), чтобы вернуться к Option[Int], например

scala> val x:Option[Either[Int,Int]] = Some(Left(2))
x: Option[Either[Int,Int]] = Some(Left(2))

scala> x.map(_.merge)
res0: Option[Int] = Some(2)
3
ответ дан Kristian Domagala 31 August 2018 в 10:34
поделиться

Это не сложно сделать вручную:

scala> val a = Some(1)
a: Some[Int] = Some(1)

scala> val b = Some(2)
b: Some[Int] = Some(2)

scala> Seq(a,b).flatten.headOption
res0: Option[Int] = Some(1)
3
ответ дан om-nom-nom 31 August 2018 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: