2014-11-18 24 views
5

Aşağıdaki kod var: Ben Boost aşağıdaki derleme hatası alıyorumboost :: lexical_cast aşırı tanımıyor istream operatörü

#include <iostream> 
#include <boost\lexical_cast.hpp> 

struct vec2_t 
{ 
    float x; 
    float y; 
}; 

std::istream& operator>>(std::istream& istream, vec2_t& v) 
{ 
    istream >> v.x >> v.y; 

    return istream; 
} 

int main() 
{ 
    auto v = boost::lexical_cast<vec2_t>("1231.2 152.9"); 

    std::cout << v.x << " " << v.y; 

    return 0; 
} 

:

Hata 1 hata C2338: Hedef türü ne std ::

mümkün istream able nor std::wistream Bu yeterince basit görünüyor ve son bir saattir masanın karşı başımı vurarak edilmiştir. Herhangi bir yardım takdir edilecektir!

DÜZENLEME: Ben Visual Studio kullanıyorum 2013.

cevap

7

2-faz arama oynayan var.

ADL'yi kullanarak aşırı yüklemeyi etkinleştirmeniz gerekiyor, bu nedenle lexical_cast ikinci aşamada bulacaktır.

Yani, İşte tamamen sabit örnek mandala

(ayrıca std::skipws kullanmalıdır) ad içine aşırı hareket etmelidir:

Live On Coliru

#include <iostream> 
#include <boost/lexical_cast.hpp> 

namespace mandala 
{ 
    struct vec2_t { 
     float x,y; 
    };  
} 

namespace mandala 
{ 
    std::istream& operator>>(std::istream& istream, vec2_t& v) { 
     return istream >> std::skipws >> v.x >> v.y; 
    } 
} 

int main() 
{ 
    auto v = boost::lexical_cast<mandala::vec2_t>("123.1 15.2"); 
    std::cout << "Parsed: " << v.x << ", " << v.y << "\n"; 
} 

enter image description here

+0

ADL tam olarak nedir? –

+2

** ["bu bir köprü" demeye eğilimliyim] (http://stackoverflow.com/questions/8111677/what-is-argument-dependent-lookup-aka-adl-or-koenig-lookup/8111750#8111750) ** – sehe

+0

Önceden sahip olduğum 'mandala' ad alanını ortadan kaldırarak yayınımı düzenledim. Aynı hata oluşur. –

İlgili konular