Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z używaniem referencji do r-wartości(Apple LLVM 8.0.0, Xcode 8.2)

Ostatnio zmodyfikowano 2016-12-31 01:10
Autor Wiadomość
Mateusz99
Temat założony przez niniejszego użytkownika
Problem z używaniem referencji do r-wartości(Apple LLVM 8.0.0, Xcode 8.2)
» 2016-12-30 23:45:51
Witam, mój problem polega na błędzie związanym z(moim zdaniem) nie pelnym wsparciem nowszych standardów C++ w Xcode 8.
Poniżej załączam przykładowy kod:
C/C++
#include <iostream>

using namespace std;

void staff( double & rs ); //Modyfikowalna l-wartość.
void staff( const double & rcs ); //r-wartość i niemodyfikowalna l-wartość.
void stove( double & r1 ); //Modyfikowalna r-wartość.
void stove( const double & r2 ); //Niemodyfikalna l-wartość.
void stove( double && r3 ); //r-wartość
int main( int argc, const char * argv[] ) {
   
    double x = 55.5;
    const double y = 32.0;
    stove( x );
    stove( y );
    stove( x + y );
   
    return 0;
}

void staff( double & rs )
{
    cout << "Modyfikowalna l-wartość." << endl;
}

void staff( const double & rcs )
{
    cout << "r-wartość i niemodyfikowalna l-wartość." << endl;
}

void stove( double & r1 )
{
    cout << "Modyfikowalna r-wartość." << endl;
}

void stove( const double & r2 )
{
    cout << "Niemodyfikalna l-wartość." << endl;
}

void stove( const double && r3 )
{
    cout << "r-wartość" << endl;
}
I błędy podczas kompilacji:

Undefined symbols for architecture x86_64:
  "stove(double&&)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Liczę, że na forum znajdą się jacyś Mac userzy
P-155720
mokrowski
» 2016-12-31 00:56:50
C/C++
#include <iostream>

using namespace std;

void staff( double & rs ); //Modyfikowalna l-wartość.
void staff( const double & rcs ); //r-wartość i niemodyfikowalna l-wartość.
void stove( double & r1 ); //Modyfikowalna r-wartość.
void stove( const double & r2 ); //Niemodyfikalna l-wartość.
// XXX: Albo tu chcesz mieć const tak jak w implementacji,
// albo nie chcesz to wtedy zmień w samej implementacji poniżej main().
void stove( const double && r3 ); //r-wartość
int main( int argc, const char * argv[] ) {
   
    double x = 55.5;
    const double y = 32.0;
    stove( x );
    stove( y );
    stove( x + y );
   
    return 0;
}

void staff( double & rs )
{
    cout << "Modyfikowalna l-wartość." << endl;
}

void staff( const double & rcs )
{
    cout << "r-wartość i niemodyfikowalna l-wartość." << endl;
}

void stove( double & r1 )
{
    cout << "Modyfikowalna r-wartość." << endl;
}

void stove( const double & r2 )
{
    cout << "Niemodyfikalna l-wartość." << endl;
}

// XXX: O właśnie tu się decyduj czy ma być const czy nie.
void stove( const double && r3 )
{
    cout << "r-wartość" << endl;
}
PS. Sprawdzone na Mac'u tak ze standardowym kompilatorem (wraz z XCode) jak i z ports'ów :-)
P-155722
Mateusz99
Temat założony przez niniejszego użytkownika
» 2016-12-31 01:10:41
Dzięki wielkie :D
Muszę jeszcze trochę zagłębić się w przeciążanie funkcji,
A co do samego programu oparłem go na książkowym przykładzie i sądziłem, że na bank musi być poprawny. No nic temat do zamknięcia, wielkie dzięki jeszcze raz. :)
P-155723
« 1 »
  Strona 1 z 1