私はプログラミングでは新しいので、CLRコンソールアプリケーションのSpeech Synthesizerオブジェクトを使用してWindows 10上のVisual Studio 2015でText to Speech C++を使用してプログラムを作成しようとすると、 。しかし、私は、変数 "t"を使ってシンセ - >スピーク( "ラインセーブ")だけでなく、とシンセ - >話す( "ライン存在");しかし、 "t"はこのようになります: "行(テキスト行)が存在する"。では、文字列をSpeak
関数に渡すにはどうしたらいいですか? は、あなたは私が把握するのに役立ちます。話すテキストスピーチパスフレーズ
#include "stdafx.h"
#include <conio.h>
#include <Windows.h>
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
using namespace System;
using namespace System::Speech::Synthesis;
using namespace System::IO;
const string FILE_NAME = "lines.txt";
vector<string> getFileLines(string file) {
ifstream in(FILE_NAME);
vector<string> lines;
for (string line; getline(in, line);) {
lines.push_back(line);
}
return lines;
}
string getUserInput() {
string str;
getline(cin, str);
return str;
}
int main()
{
vector<string> lines = getFileLines(FILE_NAME);
ofstream fileOut(FILE_NAME, ios::app);
for (int n = 0; n < 10; n++)
{
cout << "Write: > ";
std::string t = getUserInput();
auto it = std::find(lines.begin(), lines.end(), t);
if (it == lines.end()) {
fileOut << t << endl;
lines.push_back(t);
cout << "Line \"" << t << "\" saved.\n";
SpeechSynthesizer^ synth = gcnew SpeechSynthesizer();
synth->Speak("Text saved");
}
else
{
cout << "LIne \"" << t << "\" exist.\n";
SpeechSynthesizer^ synth = gcnew SpeechSynthesizer();
synth->Speak("Line exist");
}
}
cout << endl;
getUserInput();
return 0;
}
とマーシャルとこのよう:
エラーC4996 「msclr ::相互運用:: error_reporting_helper:私はこのエラーを得た
#include "stdafx.h" #include <conio.h> #include <Windows.h> #include <fstream> #include <iostream> #include <vector> #include <string> #include <msclr\marshal_cppstd.h> using namespace msclr::interop; using namespace std; using namespace System; using namespace System::Speech::Synthesis; using namespace System::IO; const string FILE_NAME = "lines.txt"; vector<string> getFileLines(string file) { ifstream in(FILE_NAME); vector<string> lines; for (string line; getline(in, line);) { lines.push_back(line); } return lines; } string getUserInput() { string str; getline(cin, str); return str; } int main() { vector<string> lines = getFileLines(FILE_NAME); ofstream fileOut(FILE_NAME, ios::app); for (int n = 0; n < 10; n++) { cout << "Write: > "; std::string t = getUserInput(); auto it = std::find(lines.begin(), lines.end(), t); if (it == lines.end()) { fileOut << t << endl; lines.push_back(t); cout << "Line \"" << t << "\" saved.\n"; String^ str = marshal_as<String^>(str); std::string line = "Line " + t + " exists!"; synth->Speak(marshal_as<String^>(line)); } else { cout << "LIne \"" << t << "\" exist.\n"; String^ str = marshal_as<String^>(str); std::string line = "Line " + t + " exists!"; synth->Speak(marshal_as<String^>(line)); } } cout << endl; getUserInput(); return 0; }
を< _To_Type、_From_Type、false>::marshal_as ': この変換はライブラリまたはヘッダーファイルでサポートされていませんこの変換に必要な10は含まれていません。
エラーC2065 '_This_conversion_is_not_supported':宣言されていない識別子 X_TTS2のC:\プログラムファイル(x86の)のMicrosoft Visualスタジオ 14.0 \ VCの\ \ドキュメントパー\ msclr \ marshal.h 219
_helloは、そう 'の#include std :: string line = "行" + t + "存在します!"; synth-> Speak(marshal_as (line.c_str())); ' –
@ztoresできます。 'marshal_as(line)'も動作するはずです。 'std :: string'->' String^'はサポートされ、文書化された変換です。 –