Q:

Аргумент функции в виде объекта класса

У меня есть класс для значений давлений. В приведенном ниже коде вылезает ошибка:
class PressureValue
{
public:
    enum pressureMeasureUnit {puUnknown, puAuto, puAtmosphere, puTechAtmosphere,
                              puKgCm2, puPascal, puMillimetreOfMercury, puTor, puMillibar}pressureMeasureUnitP;
    PressureValue(PressureValue::pressureMeasureUnit defaultUnit = puKgCm2){
        defaultPressureUnit = defaultUnit;
    }
    ~PressureValue(){}
    float value = 0.0;
    //перегрузка оператора
    PressureValue& operator=(float f){
        value = f;
        return *this;
    }
    operator float() const{
        return value;
    }
private:
    pressureMeasureUnit defaultPressureUnit;
    pressureMeasureUnit convertingUnit;
};

void doSomething(PressureValue newSensor = 1.0){
    //do something
}

int main(){
    PressureValue p(PressureValue::puMillibar);
}

prog.cpp:36:47: error: could not convert ‘1.0e+0’ from ‘double’ to ‘PressureValue’
   void doSomething(PressureValue newSensor = 1.0){

Проблема №1
Т.е. я хочу, чтобы ф-я doSomething по умолчанию работала с давлением 1.0 ед.изм., но не могу установить аргумент по умолчанию. 
Зато работает так:
void doSomething(PressureValue newSensor = PressureValue::puMillimetreOfMercury){
    //do something
}

И, соответственно, я не могу сделать так из-за той же ошибки:
int main(){
    PressureValue p = 1.0;
}

Проблема №2
Есть ли возможность задать поле value при первоначальном создании экземпляра класса и при этом оставить возможность задавать единицы измерения (PressureValue::pressureMeasureUnit), т.е. иметь возможность делать что-то вроде этого:
int main(){
    PressureValue p{PressureValue::puMillimetreOfMercury} = 1.0;
}

Edit:
Проблему №1 решил, добавив конструктор
PressureValue(const float newValue){
    value = newValue;
}

Так работает:
void doSomething(PressureValue newSensor = 1.0){
    //do something
}

Проблему №2 решил, добавив конструктор с двумя параметрами
PressureValue(PressureValue::pressureMeasureUnit newUnit, float newValue){
    currentUnit = newUnit;
    value = newValue;
}

Работает так:
int main(){
    PressureValue p = {PressureValue::puMillimetreOfMercury, 1.0};
}

A:

С помощью подсказок VTT, кажется, удалось решить все проблемы.
Рабочий код:
#ifndef UNITS_H
#define UNITS_H

class PressureValue
{
public:
    enum pressureMeasureUnit {puUnknown, puAuto, puAtmosphere, puTechAtmosphere,
                              puKgCm2, puPascal, puMillimetreOfMercury, puTor, puMillibar}pressureMeasureUnitP;
    PressureValue(PressureValue::pressureMeasureUnit defaultUnit = puKgCm2){
        currentUnit = defaultUnit;
    }
    PressureValue(const float newValue){
        value = newValue;
    }
    PressureValue(PressureValue::pressureMeasureUnit newUnit, float newValue){
        currentUnit = newUnit;
        value = newValue;
    }
    ~PressureValue(){}
    float value = 0.0;
    //перегрузка оператора присваивания
    PressureValue& operator=(float f){
        value = f;
        return *this;
    }
    operator float() const{
        return value;
    }

private:
    pressureMeasureUnit currentUnit;
};

void doSomething(PressureValue newSensor = 1.0){
    //do something
}
void doSomethingToo(PressureValue newSensor = {PressureValue::puMillimetreOfMercury, 1.0}){
    //do something
}

int main(){
    PressureValue p = {PressureValue::puMillimetreOfMercury, 1.0};
    PressureValue d = p;
    PressureValue c = 3.0;

}

#endif // UNITS_H

