2016-04-06 12 views
0

bi'şey hiçbir örneği, ancak görsel stüdyo 2015 bana aşağıdaki hata veriyor.C++: cin.getline - aşırı yük fonksiyonu bir .txt dosyasına metin satırı yazmaya çalışıyorum

Önem Kod Açıklama Proje Dosyası Satır Giderme Devlet Hatası (aktif) aşırı fonksiyon "std :: basic_istream < _Elem, _Traits> :: getline'ın hiçbir örneği [_Elem = karakter, _Traits = std ile :: char_traits] 16

ve

Önem Kod Açıklama Proje Dosyası Satır Giderme Devlet \ Studying.cpp incelenmesi \ incelenmesi \ Klaas \ Belgeler \ Projects Visual Studio 2015 \ \ \ Kullanıcılar: "c incelenmesi argüman listesi maçları Hata C2664 'std :: basic_istream> & std :: basic_istream> :: get (_Elem *, std :: streamsize, _Elem)': 'char *' Studying1 c 'std :: string' dan argüman 1 dönüştürmek olamaz: \ kullanıcılar \ klaas \ belgeler görsel stüdyo 2015 \ projeleri \ \ studying1 \ studying1 studying1.cpp \ 16

Benim kaynak kodu: böyle

dahil olarak cevaplar birden çok arama yapılan ve bulduk

#include <iostream> 
#include "stdafx.h" 
#include <fstream> 
#include <string> 

using namespace std; 
int main() 
{ 
    ofstream myFile; 
    string myText; 
    myFile.open("sometext.txt"); 
    cout << "Write text to save to file: "; 
    cin.ignore(); 
    cin.getline(myText, sizeof(myText)); 
    myFile << myText; 
    myFile.close(); 
    return 0; 
} 

cin.ignore(); 
cin.getline 

üstünde 10, ama sadece çalışmak ve gerçekten hata ne anlama geldiğini anlamıyorum ve bu ı bir dize dönüştürmek için çalışıyorum sanıyor neden ben görmüyorum alamayan char Doğru işlevini kullanmıyorsanız

+0

o karakter *, dize – Incomputable

+0

'sizeof (myText)' yapmaz bunu düşünmek beklediğini Ne: Her yerde belirtildiği gibi

char myText[1024]; cin.getline(myText, sizeof(myText)); 

, bu std::getline işlevi kullanmak daha iyidir yapar. Daha çok 'myText.size()' kullanın. –

+0

Gördüm, ama bir dize beklemek nasıl emin değilim, ve ben de ilk etapta bir char * beklemek gerçekten emin değilim :( –

cevap

2

Herhangi bir ipucu :) çok hoş olurdu. Bunun yerine cin.getline() size

std::getline(cin, myText) 

cin.getline() önceden tahsis char* beklediğini ve myText değil kullanmalıdır. Çok zor bir şekilde std::basic_istream::getline() için yeterince uzun bir tampon preallocate yönetmek de, bu nedenle bu fonksiyon hiç neredeyse hiçbir zaman yararlıdır.

+0

Cevabımın yanlış olduğunu merak ediyorum. – SergeyA

+0

Ah anladım, yardım için çok teşekkür ederim, şimdi çalışıyor :) –

+0

Ayrıca, karıncaların vektörünü önceden tahsis edebilir ve taşmaları önlemek için vektörün büyüklüğü ile birlikte iteratörün başına geçebilirdi, ama çözümün ekstrem durumlarda – Incomputable

0

kullanım getline(cin,myText) dürüstçe bu sorunun niçin bilmiyoruz bile bir sorun ama bu çalıştığını çok iyi biliyorum eğer.

+0

* Gerçekten bu sorunun neden olduğunu bilmiyorum * cevap vermeyin. – SergeyA

+0

hayır ama benim çözümüm sorunu çözüyor :) –

+0

Thankyou çok :) şimdi çalışıyor. Bu görsel stüdyoya özgü bir şey mi yoksa sadece cin.getline() kullanan yanlışları anladım mı? –

0
+0

Lütfen buggy ve belirsiz referansı önermeyin. [en.cppreference.com] (http://en.cppreference.com/w/) daha iyi bir iş çıkarıyor. –

+0

@ πάντα ῥεῖ Cplusplus web sitesinin sorunlu olduğunu bilmiyordum. O zaman cppreferansı deneyeceğim. Teşekkürler! – tetorea

+0

@ user4581301: evet, std :: getline'dan daha kötü bir çözümdür, ancak sadece OP kodunda hatanın ne olduğunu bildirmek istedim. Düşüşümü cehenneme çevirmek için cevabımı düzenleyeceğim, o zaman ... – tetorea