“ +”:不能添加两个指针

时间:2018-09-20 13:12:44

标签: c++ visual-c++

操作系统: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行。

2 个答案:

答案 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() );