«+»: нельзя добавить два указателя - PullRequest
0 голосов
/ 20 сентября 2018

ОС: 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 голосов
/ 20 сентября 2018

Все ваши вызовы вида

system("string1" + filename.c_str() + "string2");

необходимо заменить на

system(("string1" + filename + "string2").c_str());

"string1" - это литерал const char[], который уменьшается до const char* при + применены.filename.c_str() также является указателем const char*.Компилятор выдает диагностическое сообщение, когда вы пытаетесь добавить два указателя, поскольку это бессмысленно.

Если написать так, как у меня есть, заставляет + быть перегруженным оператором + класса std::string, что приводит к объединение .

Моя запись c_str() в конце извлекает буфер данных из анонимного временного std::string, который действителен для времени жизни функции system.

0 голосов
/ 20 сентября 2018

Строковый литерал имеет тип 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() );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...