Документация Заголовочного файла C/C++ [закрывается]

@Miki, почему я не могу использовать свои кнопки попеременно? Как это исправить? Я имею в виду, что я хочу использовать их одновременно.

РЕДАКТИРОВАТЬ: я сам это исправил. Нет необходимости в помощи. :)

#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;


Mat3b canvas;
string buttonText("Nacisnij guzik!");
string buttonText2("Nacisnij guzik NR2!");
string winName = "PokerGui";
int a = 0;//mozna pozniej usunac, potrzebne tylko czy button reaguje jak nalezy

Rect button, button2;



void callBackFunc(int event, int x, int y, int flags, void* userdata)
{
    if (event == EVENT_LBUTTONDOWN)
    {
        if (button.contains(Point(x, y)))//ponizej to co ma sie wykonac po nacisnieciu klawisza
        {
            a = a + 7;
            cout << "Nacisnales guzik!\n" << endl;
            printf("liczba = %i\n", a);
            rectangle(canvas(button), button, Scalar(0, 0, 255), 2);

        }
        else if (button2.contains(Point(x, y)))//ponizej to co ma sie wykonac po nacisnieciu klawisza
        {
            //a = a + 7;
            cout << "Nacisnales guzik NR2!\n" << endl;
            //printf("liczba = %i\n", a);
            rectangle(canvas(button2), button, Scalar(0, 0, 255), 2);
        }
    }
    //if (event == EVENT_LBUTTONUP)
    //{
    //rectangle(canvas, button, Scalar(200, 200, 200), 2);
    //}

    imshow(winName, canvas);
    waitKey(1);
}

void callBackFunc2(int event, int x, int y, int flags, void* userdata)
{
    if (event == EVENT_LBUTTONDOWN)
    {
        if (button2.contains(Point(x, y)))//ponizej to co ma sie wykonac po nacisnieciu klawisza
        {
            //a = a + 7;
            cout << "Nacisnales guzik NR2!\n" << endl;
            //printf("liczba = %i\n", a);
            rectangle(canvas(button2), button, Scalar(0, 0, 255), 2);

        }
    }
    //if (event == EVENT_LBUTTONUP)
    //{
    //rectangle(canvas, button, Scalar(200, 200, 200), 2);
    //}

    imshow(winName, canvas);
    waitKey(1);
}

int main()
{
    // An image
    Mat3b img(300, 300, Vec3b(0, 255, 0));

    // Your button
    button = Rect(0, 0, img.cols, 50);
    button2 = Rect(0, 60, img.cols, 50);

    // The canvas
    canvas = Mat3b(img.rows + button.height, img.cols, Vec3b(0, 0, 0));

    // Draw the button
    canvas(button) = Vec3b(200, 200, 200);
    canvas(button2) = Vec3b(200, 200, 200);
    putText(canvas(button), buttonText, Point(button.width*0.35, button.height*0.7), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 0));
    putText(canvas(button2), buttonText2, Point(button.width*0.25, button.height*0.7), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 0));

    // Draw the image
    //img.copyTo(canvas(Rect(0, button.height, img.cols, img.rows)));

    // Setup callback function
    namedWindow(winName);
    setMouseCallback(winName, callBackFunc);
    //setMouseCallback(winName, callBackFunc2);

    imshow(winName, canvas);
    waitKey();

    return 0;
}
17
задан Laserallan 28 January 2009 в 10:15
поделиться

5 ответов

Обычно я помещал документацию для интерфейса (параметры, возвращаемое значение, , что функция делает) в интерфейсном файле (.h) и документации для реализации (, как , функция делает) в файле реализации (.c, .cpp.m).

я пишу обзор класса незадолго до его объявления, таким образом, у читателя есть непосредственная основная информация.

инструментом, который я использую, является Doxygen.

42
ответ дан 30 November 2019 в 10:21
поделиться
  1. у меня определенно была бы некоторая документация в самих заголовочных файлах. Это значительно улучшает отладку, чтобы иметь информацию рядом с кодом, а не в отдельных документах. Как показывает опыт, я зарегистрировал бы API (возвращаемые значения, аргумент, изменения состояния, и т.д.) рядом с кодом и высокоуровневыми обзорами архитектуры в отдельных документах (для высказывания более широкого мнения того, как все соединено; трудно поместить это вместе с кодом, так как это обычно ссылки несколько классов сразу).

  2. Doxygen прекрасен на основе моего опыта.

8
ответ дан 30 November 2019 в 10:21
поделиться

Я полагаю, что Doxygen является наиболее распространенной платформой для генерации документации, и насколько я знаю, он более или менее может покрыть JavaDoc-нотацию (не ограниченный, конечно). Я использовал doxygen для C с результатами OK, я действительно думаю, что это более подходит для C++ все же. Вы могли бы хотеть изучить robodoc также, хотя я думаю, что Бритва Оккама скажет Вам скорее идти для Doxygen.

Относительно то, сколько документации, я никогда не был вентилятором документации сам, но нравится ли мне это или нет, имея больше документации всегда, бьет наличие никакой документации. Я поместил документацию API в заголовочный файл, и документация реализации в реализации (выдерживает рассуждать, не так ли?).:) Тем путем IDE имеют шанс взять его и показать его во время автозавершения (Eclipse делает это для JavaDocs, например, возможно, также для doxygen?), который не должен быть недооценен. JavaDoc имеет эту дополнительную причуду, что он использует первое предложение (т.е. до первой точки) как краткое описание, не знайте, делает ли Doxygen это, хотя, но если так, он должен быть учтен при записи документации.

Наличие большого количества документации рискует устареть, однако, сохранение документации близко к коду даст людям шанс усовершенствовать его, таким образом, необходимо будет определенно сохранить его в источнике/заголовочных файлах. О чем нельзя забыть, хотя производство документации. Да, некоторые люди будут использовать документацию непосредственно (через IDE или просто чтение заголовочного файла), но некоторые люди предпочитают другие пути, таким образом, необходимо, вероятно, считать помещение Вашего (регулярно обновляемым) документацией API онлайн, все хороший и доступный для просмотра, а также возможно создание файлов человека, если Вы нацелены *, отклоняют - базирующиеся разработчики.

Это составляет мои два цента.

4
ответ дан 30 November 2019 в 10:21
поделиться

Поместите достаточно в код, что он может одинокий. Почти каждый проект, которым я был в том, где документация была отдельной, это стало устаревшим или не было сделано, частично что, если это - отдельный документ, это становится отдельной задачей, частично поскольку управление не допускало его как задачу в составлении бюджета. При документировании встроенный, поскольку часть потока работает намного лучше, по моему опыту.

Запись документация в форме, которую распознает большинство редакторов, является блоком; для C++ это, кажется,/*, а не//. Тем путем можно свернуть его и просто видеть объявления.

3
ответ дан 30 November 2019 в 10:21
поделиться

Возможно, Вы интересовались бы gtk-документ . Это может быть "немного неудобно установить и использовать", но можно получить хорошую документацию API от исходного кода, будучи похож на это:

Строковые Служебные функции

1
ответ дан 30 November 2019 в 10:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: