Я новичок в программировании, поэтому вам нужна ваша помощь, просто попробуйте сделать программу с текстом на речь C++ в Visual Studio 2015 в Windows 10 с использованием объекта Speech Synthesizer в приложении консоли CLR , Но я не могу понять, как получить строку через переменную «t», чтобы говорить не только synth-> Speak («Линия сохранена»); и synth-> Speak («Линия существует»); , но с «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;
}
и таким образом с маршалом:
#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;
}
Я получил эту ошибку:
Ошибка C4996 «msclr :: Interop :: error_reporting_helper < _To_Type, _From_Type, false>:: marshal_as ': Это преобразование не поддерживается библиотекой или файлом заголовка , необходимых для этого преобразования, не включается.
Ошибка C2065 '_This_conversion_is_not_supported': необъявленный идентификатор X_TTS2 C: \ Program Files (x86) \ Microsoft Visual Studio 14,0 \ \ VC включить \ msclr \ marshal.h 219
_hello, спасибо за отзыв, очень полезно, так что, кажется, я могу использовать его таким образом, работает '#include std :: string line = "Линия" + t + "существует!"; synth-> Speak (marshal_as (line.c_str())); ' –
@ztores вы можете, да. 'marshal_as (строка)' также должен работать, поскольку 'std :: string'->' String^'поддерживается и документируется. –