操作系统:Windows 8.1 64bit | IDE:Visual Studio 2018
https://pastebin.com/6Lh6kABe-如果您需要正确格式的代码。
我正在开发一个小的命令行工具,以使用ADB截屏。 (详细信息,ADB将与应用程序包含在同一目录中;但目前不在此目录中。)
修复了我的代码中的30多个错误后,该错误停止了构建过程,现在我在这里。一个小时过去了,我无法解决它,所以我决定在这里问你。
代码如下:
// ADBSS.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//
#include <pch.h>
#include <iostream>
#include <string>
#include <windows.h>
#include <tchar.h>
using namespace std;
int main(int argc, char** argv) {
std::string filename;
filename = "a";
SetConsoleTitle(_T("*-_ ADB Screenshooter _-*"));
std::cout << "+---------------------------------+" << endl;
std::cout << "|ADB Screenshooter [v1.0] |" << endl;
std::cout << "|Take screenshots from your device|" << endl;
std::cout << "|with a simple CLI tool. |" << endl;
std::cout << "+---------------------------------+" << endl;
cout << "Welcome to ADB Screenshooter." << endl;
cout << "Please input the filename: (The screenshot will be saved with that name)" << endl;
cout << "DO NOT INCLUDE ANY SPACES IN THE FILENAME. Use only letters." << endl;
cin >> filename;
Sleep(4);
system("cls");
SetConsoleTitle(_T("*-_ Taking the screenshot _-*"));
cout << "Trust your computer now if you haven't before." << endl;
system("adb shell screencap -p /sdcard/ADBScreenshooter/" + filename.c_str() + ".png");
Sleep(4);
system("cls");
SetConsoleTitle(_T("*-_ Copying to PC! _-*"));
cout << "The file will now be copied to the location from where you run ADB Screenshooter." << endl;
system("adb pull /sdcard/" + filename.c_str() + ".png");
Sleep(4);
system("cls");
SetConsoleTitle(_T("*-_ Done! _-*"));
cout << "Everything is done! Thanks for using ADBSS. Press any key to finish." << endl;
system("pause>nul");
return 0;
}
当前错误是:
Ważność Kod Opis Projekt Plik Wiersz Stan pominięcia
Błąd C2110 "+": cannot add two pointers ADBSS
第29和34行。
答案 0 :(得分:3)
您所有的表格呼叫
system("string1" + filename.c_str() + "string2");
需要替换为
system(("string1" + filename + "string2").c_str());
"string1"
是一个const char[]
文字,当应用const char*
时衰减为+
。 filename.c_str()
也是const char*
指针。尝试添加两个指针时,编译器将发出诊断信息,因为这毫无意义。
按照这样的方式写,迫使+
成为+
类的重载std::string
运算符,这会导致 concatenation 。
我最后的文字c_str()
从匿名临时std::string
中提取数据缓冲区,该缓冲区在system
函数的生命周期内有效。
答案 1 :(得分:2)
字符串文字的类型为char const[]
(将衰减为char const *
)。 c_str()
的返回类型为char const *
。 operator+()
是为std::string
定义的,但没有为char
指针定义的。您不能添加两个指针。
您可以通过以下方法解决此问题:在std::string
中设置命令,然后调用system( s.c_str() )
而不是将命令直接内联:
std::string s( "adb shell screencap -p /sdcard/ADBScreenshooter/" );
s += filename;
s += ".png";
std::system( s.c_str() );