1

私はプログラミングでは新しいので、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

答えて

1

が含まれています

marshal_as

あなたはサポートされていないデータ型、marshal_asワットのペアをマーシャリングしようとした場合コンパイル時にエラーC4996を生成します。詳細については、このエラーが発生したメッセージをお読みください。 C4996エラーは廃止された機能以外にも生成される可能性があります。

Overview of Marshaling in C++

marshal_as()機能を使う場合System::String^からstd::stringをマーシャリングサポートしています。その一例は、サポートされている変換が文書化されている

をサポートされていないデータ型のペアをマーシャリングしようとしていますmarshal_cppstd.hを使用してください:

#include <msclr\marshal_cppstd.h> 

std::string line = "Line " + t + " exists!"; 
synth->Speak(marshal_as<String^>(line)); 

あなたがサポートさマーシャル変換されていない、String^String^をマーシャリングしようとしている

String^ str = marshal_as<String^>(str); 

:それはこの文を参照されない限り、ショーは、意味がありません。また、宣言する同じステートメント内の変数を使用すると、それは未定義の動作であるため、ステートメントを完全に削除する必要があります。

あなたがmarshal.hを使用する場合は別の方法として、marshal_as()const char*をマーシャリングサポートしています。

#include <msclr\marshal.h> 

std::string line = "Line " + t + " exists!"; 
synth->Speak(marshal_as<String^>(line.c_str())); 
+0

_helloは、そう 'の#include std :: string line = "行" + t + "存在します!"; synth-> Speak(marshal_as (line.c_str())); ' –

+0

@ztoresできます。 'marshal_as (line)'も動作するはずです。 'std :: string'->' String^'はサポートされ、文書化された変換です。 –

関連する問題