Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z kompilacja programu, przesiadka z Codeblocks na Visual Studio

Ostatnio zmodyfikowano 2020-07-04 21:30
Autor Wiadomość
skupi967
Temat założony przez niniejszego użytkownika
Problem z kompilacja programu, przesiadka z Codeblocks na Visual Studio
» 2020-07-04 19:30:44
Witam. Mam problem. Dzis przenioslem sie z IDE Codeblocks na IDE Visual Studio i po wklepaniu kodu z Codeblocks do Visual Studio nie moge go skompilowac bo dostaje bledy. Prosze o pomoc, bede bardzo wdzieczny.

Kod zrodlowy programu:

C/C++
#include <iostream>
#include <string>
#include <map>
#include <cmath>
#include <fstream>
#include <sstream>
#include <numeric>
#include <limits>
#include <utility>
#include <vector>
#include <algorithm>
#include <functional>
#include <array>
#include <windows.h>
#include <conio.h>

using namespace std;

void print( string::size_type n, string const & s )
{
    if( n == string::npos ) {
        cout << "not found\n";
    }
    else {
        cout << "found: " << s.substr( n ) << '\n';
    }
}

bool check()
{
    char chk; int j;
    cout << "\n\nPress any key to search another phrase..." << endl << endl << endl;
    chk = _getch();
    j = chk;
    for( int i = 1; i <= 256; i++ )
    if( i == j )
    {
        return true;
        break;
    }
    system( "cls" );
}

map < char, int > make_pythagorean_map()
{
    return {
        { 'A', 1 },
        { 'a', 1 },
        { 'B', 2 },
        { 'b', 2 },
        { 'C', 3 },
        { 'c', 3 },
        { 'D', 4 },
        { 'd', 4 },
        { 'E', 5 },
        { 'e', 5 },
        { 'F', 6 },
        { 'f', 6 },
        { 'G', 7 },
        { 'g', 7 },
        { 'H', 8 },
        { 'h', 8 },
        { 'I', 9 },
        { 'i', 9 },
        { 'J', 1 },
        { 'j', 1 },
        { 'K', 2 },
        { 'k', 2 },
        { 'L', 3 },
        { 'l', 3 },
        { 'M', 4 },
        { 'm', 4 },
        { 'N', 5 },
        { 'n', 5 },
        { 'O', 6 },
        { 'o', 6 },
        { 'P', 7 },
        { 'p', 7 },
        { 'Q', 8 },
        { 'q', 8 },
        { 'R', 9 },
        { 'r', 9 },
        { 'S', 1 },
        { 's', 1 },
        { 'T', 2 },
        { 't', 2 },
        { 'U', 3 },
        { 'u', 3 },
        { 'V', 4 },
        { 'v', 4 },
        { 'W', 5 },
        { 'w', 5 },
        { 'X', 6 },
        { 'x', 6 },
        { 'Y', 7 },
        { 'y', 7 },
        { 'Z', 8 },
        { 'z', 8 }
    };
}

map < char, int > make_simpleeng_map()
{
    return {
        { 'A', 1 },
        { 'a', 1 },
        { 'B', 2 },
        { 'b', 2 },
        { 'C', 3 },
        { 'c', 3 },
        { 'D', 4 },
        { 'd', 4 },
        { 'E', 5 },
        { 'e', 5 },
        { 'F', 6 },
        { 'f', 6 },
        { 'G', 7 },
        { 'g', 7 },
        { 'H', 8 },
        { 'h', 8 },
        { 'I', 9 },
        { 'i', 9 },
        { 'J', 10 },
        { 'j', 10 },
        { 'K', 11 },
        { 'k', 11 },
        { 'L', 12 },
        { 'l', 12 },
        { 'M', 13 },
        { 'm', 13 },
        { 'N', 14 },
        { 'n', 14 },
        { 'O', 15 },
        { 'o', 15 },
        { 'P', 16 },
        { 'p', 16 },
        { 'Q', 17 },
        { 'q', 17 },
        { 'R', 18 },
        { 'r', 18 },
        { 'S', 19 },
        { 's', 19 },
        { 'T', 20 },
        { 't', 20 },
        { 'U', 21 },
        { 'u', 21 },
        { 'V', 22 },
        { 'v', 22 },
        { 'W', 23 },
        { 'w', 23 },
        { 'X', 24 },
        { 'x', 24 },
        { 'Y', 25 },
        { 'y', 25 },
        { 'Z', 26 },
        { 'z', 26 }
    };
}

map < char, int > make_gfive_map()
{
    return {
        { 'A', 7 },
        { 'a', 7 },
        { 'B', 8 },
        { 'b', 8 },
        { 'C', 1 },
        { 'c', 1 },
        { 'D', 2 },
        { 'd', 2 },
        { 'E', 3 },
        { 'e', 3 },
        { 'F', 4 },
        { 'f', 4 },
        { 'G', 5 },
        { 'g', 5 },
        { 'H', 6 },
        { 'h', 6 },
        { 'I', 7 },
        { 'i', 7 },
        { 'J', 8 },
        { 'j', 8 },
        { 'K', 9 },
        { 'k', 9 },
        { 'L', 1 },
        { 'l', 1 },
        { 'M', 2 },
        { 'm', 2 },
        { 'N', 3 },
        { 'n', 3 },
        { 'O', 4 },
        { 'o', 4 },
        { 'P', 5 },
        { 'p', 5 },
        { 'Q', 6 },
        { 'q', 6 },
        { 'R', 7 },
        { 'r', 7 },
        { 'S', 8 },
        { 's', 8 },
        { 'T', 9 },
        { 't', 9 },
        { 'U', 1 },
        { 'u', 1 },
        { 'V', 2 },
        { 'v', 2 },
        { 'W', 3 },
        { 'w', 3 },
        { 'X', 4 },
        { 'x', 4 },
        { 'Y', 5 },
        { 'y', 5 },
        { 'Z', 6 },
        { 'z', 6 }
    };
}

map < char, int > select_map( int choice )
{
    switch( choice )
    {
    case 1:
        {
            return make_pythagorean_map();
        }
    case 2:
        {
            return make_simpleeng_map();
        }
    case 3:
        {
            return make_gfive_map();
        }
    }
}

int main()
{
    int cho = 0, d, help, counter = 1, cnt = 0, choice = 0, chosennum = 0, asd = 0, f = 0, x, tab[ 4 ], b = 0, easy, H = 1, sum;
    char o, c;
    bool flag;
    string phrasetwo, str, phrase, str2;
    string::size_type G, n;
    vector < pair < int, string > > Datas;
   
    do
    {
       
        while( 1 )
        {
            system( "cls" );
            cout << "You want to use: " << endl << "1) Pythagorean Gematria" << endl << "2) English/Simple Gematria" << endl << "3) Extra: " << endl << "Gematria with G = 5 " << endl << endl;
            cin >> phrasetwo;
            istringstream asd( phrasetwo );
           
            if( !( asd >> d ) || asd >> o )
            {
                system( "cls" );
                cout << "You want to use: " << endl << "1) Pythagorean Gematria" << endl << "2) English/Simple Gematria" << endl << "3) Extra: " << endl << "Gematria with G = 5" << endl << endl;
            }
            else
            {
                cho = stoi( phrasetwo );
                if( cho <= 3 && cho >= 1 )
                {
                    break;
                }
            }
        }
       
        auto m = select_map( cho );
       
        ifstream input( "words.txt" );
        ofstream outputhtml( "Results.html" );
       
        while( 1 )
        {
            system( "cls" );
            cout << "You want to check:" << '\n' << "1) Number" << '\n' << "2) Phrase" << endl;
            cin >> phrase;
            istringstream s( phrase );
           
            if( !( s >> x ) || s >> c )
            {
                system( "cls" );
                cout << "You want to check:" << '\n' << "1) Number" << '\n' << "2) Phrase" << endl;
            }
            else
            {
                choice = stoi( phrase );
                if( choice <= 2 && choice >= 1 )
                {
                    break;
                }
            }
        }
       
        switch( choice )
        {
        case 1:
            {
                cout << "Which number do you want to check?: ";
                while( 1 )
                {
                    cin >> phrase;
                    istringstream s( phrase );
                   
                    if( !( s >> x ) || s >> c )
                    {
                        cout << endl << "Which number do you want to check?: ";
                    }
                    else
                    {
                        chosennum = stoi( phrase );
                        break;
                    }
                }
                cout << endl << "All results found: " << endl;
                break;
            }
           
        case 2:
            {
                do
                {
                    flag = false;
                    cout << "Which phrase do you want to check?: ";
                   
                    cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                    getline( cin, phrase );
                   
                    for( int i = 0; i < phrase.length(); i++ )
                    {
                        if( isdigit( phrase[ i ] ) )
                        {
                            flag = true;
                        }
                    }
                    cout << endl;
                } while( flag == true );
               
                for( char charr: phrase )
                {
                    chosennum += m[ charr ];
                }
                cout << '\t' << phrase << " in gematria = " << chosennum << endl;
                cout << endl << "All results found: " << endl;
                break;
            }
        }
       
        while( getline( input, str ) )
        {
            sum = 0;
            n = str.find( ',' );
            G = n;
           
            if( n != string::npos )
            {
                do
                {
                    tab[ b ] = n;
                    b++;
                    n = str.find( ',', n + 1 );
                } while( n != string::npos );
               
                str2 = str.substr( tab[ 3 ] + 1 );
                easy = stoi( str2 );
                str.resize( G );
                b = 0;
            }
           
            for( int i = 0; i < str.length(); i++ )
            {
                if((( int ) str[ i ] ) > 127 ||(( int ) str[ i ] ) < 0 )
                {
                    str.clear();
                }
            }
           
            for( char charr: str )
            {
                sum += m[ charr ];
            }
           
            if( sum == chosennum )
            {
                Datas.emplace_back( easy, str );
                help = sum;
                counter++;
            }
        }
       
        sort( Datas.begin(), Datas.end(), greater < pair < int, string > >() );
       
        outputhtml << "<!DOCTYPE html>" << '\n' << "<html>" << '\n' << "<head>" << '\n' << "<title>Results</title>" << '\n' << '\n' << "<style>" << '\n' << "div.a {" << '\n' << "font-size: 26px;" << '\n' << "color: red;" << '\n' << "}" << '\n' << '\n' << "div.b {" << '\n' << "font-size: 14px;" << '\n' << "color: red;" << '\n' << "text-align: center;" << '\n' << "}" << '\n' << '\n';
        outputhtml << "body {" << '\n' << "background-color: #f5f5f0;" << '\n' << "}" << '\n' << '\n' << ".header {" << '\n' << "background: #000000;" << '\n' << "}" << '\n' << '\n' << "img {" << '\n' << "display: block;" << '\n';
        outputhtml << "margin-left: auto;" << '\n' << "margin-right: auto;" << '\n' << "width: 20%;" << '\n' << "height: 20%;" << '\n' << "}" << '\n' << '\n';
        outputhtml << "td {" << '\n' << "border: 1px solid black;" << '\n' << "border-collapse: collapse;" << '\n' << "font-size: 22px;" << '\n' << "}" << '\n' << '\n' << "th {" << '\n' << "border: 1px solid black;" << '\n' << "border-collapse: collapse;" << '\n' << "font-size: 22px;color: #1a1aff;" << '\n' << "}" << '\n' << '\n';
        outputhtml << "table.center {" << '\n' << "margin-left:auto;" << '\n' << "margin-right:auto;" << '\n' << "text-align: center;" << '\n' << "}" << '\n' << "</style>" << '\n' << "</head>" << '\n' << "<body>" << '\n' << '\n';
        outputhtml << "<div class=" << '\"' << "header" << '\"' << ">" << '\n' << "<img src=" << '\"' << "logo/eye.webp" << '\"' << " alt=" << '\"' << "The All Seeing Eye" << '\"' << "/>" << '\n' << "</div>" << '\n' << '\n';
        outputhtml << "<table class=" << '\"' << "center" << '\"' << ">" << '\n' << "<thead>" << '\n' << "<tr> <th> Index <th> Phrase <th> Gematria Value <th> Searches" << '\n' << "<tbody>" << '\n';
       
        for( const auto & e: Datas )
        {
            cout << "No[" << H << "]: " << e.second << '\t' << '\t' << '\t' << "Value In Gematria: " << help << '\t' << '\t' << '\t' << "Search Number: " << e.first << '\n';
            outputhtml << "<tr> <td>" << H << "<td>" << e.second << "<td>" << help << "<td>" << e.first << '\n';
            H++;
        }
       
        H = 1;
       
        outputhtml << "</table>" << '\n' << '\n' << "<br>" << '\n' << "<br>" << '\n' << "<div class=" << '\"' << "a" << '\"' << "><b>You have found: " <<( counter - 1 ) << " phrases</b></div>" << '\n' << "</br>" << '\n' << "</br>" << '\n' << "<div class=" << '\"' << "b" << '\"' << "><b>Gematrix Database from May 28th 2020</b><br>Have fun with decoding</br></div>" << "</body>" << '\n' << "</html>";
       
        cout << "\n\n You have found: " <<( counter - 1 ) << " phrases" << '\n';
       
        ShellExecute( NULL, "open", "Results.html", NULL, NULL, SW_SHOWDEFAULT );
    } while( check() );
   
}


A to lista bledow:

1>------ Kompilacja rozpoczęta: Projekt: Gematria Calculator 1, Konfiguracja: Debug Win32 ------
1>Gematria Calculator 1.cpp
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(329,59): warning C4003: zbyt mało argumentów wywołania makra podobnego do funkcji „max”
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(329,59): error C2589: "(": niedozwolony token po prawej stronie "::"
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(329): error C2144: błąd składniowy: „unknown-type” powinno być poprzedzone „)”
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(329): error C2144: błąd składniowy: „unknown-type” powinno być poprzedzone „;”
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(329,59): error C2059: błąd składniowy: „)”
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(329,70): error C2059: błąd składniowy: „)”
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(332,35): warning C4018: "<": niezgodność typu ze znakiem/bez znaku
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(373,31): warning C4018: "<": niezgodność typu ze znakiem/bez znaku
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(417,78): error C2664: „HINSTANCE ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT)”: nie można dokonać konwersji argumentu 2 z „const char [5]” do „LPCWSTR”
1>C:\Users\Lenovo\Desktop\Gematria Calculator 1\Gematria Calculator 1\Gematria Calculator 1.cpp(417,28): message : Wskazane typy nie są powiązane; konwersja wymaga operatora reinterpret_cast, rzutowania w stylu języka C lub rzutowania w stylu funkcji
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\shellapi.h(87,22): message : zobacz deklarację „ShellExecuteW”
1>Kompilowanie projektu „Gematria Calculator 1.vcxproj” wykonane — NIEPOWODZENIE.
========== Kompilacja: 0 zakończono powodzeniem, 1 zakończono niepowodzeniem, 0 zaktualizowano, 0 pominięto ==========


Drugi problem jest taki ze gdy chcialem zrobic niekonczace sie dzialanie programu (po tym jak uzytkownik wcisnie jakikolwiek guzik program zaczyna od nowa dzialanie) zaczelo zle liczyc. Cos sie popsulo. Dodalem tylko to na poczatku:
C/C++
do
{
    ...tutaj caly kod programu z funkcji main
} while( check() );

...tu koniec programu

O co chodzi? Mam tez pytanie czy zaimplementowalem jakies biblioteki ktorych nie uzywam?
P-177287
pekfos
» 2020-07-04 20:01:42
Błędy składniowe wynikają z kolizji nazw z makrem max().
https://stackoverflow.com​/questions/1394132​/macro-and-member-function-conflict

nie można dokonać konwersji argumentu 2 z „const char [5]” do „LPCWSTR”
To przez kompilowanie kodu z API unikodowym. Albo zmień w ustawieniach projektu, albo odwołuj się jawnie do odpowiednich wariantów funkcji. W tym wypadku ShellExecuteA().

Dodalem tylko to na poczatku:
Coś takiego nie jest podstawą do diagnostyki z naszej strony. Podaj faktyczny kod, z którym jest problem.
P-177289
skupi967
Temat założony przez niniejszego użytkownika
» 2020-07-04 20:09:21
Zle mnie zrozumiales, podalem caly kod. Po prostu na poczatku dodalem petle do{ a na samym koncu programu jej warunek while i to zepsulo dzialanie programu. W srodku caly kod programu to byl wlasnie ten dlugi kod co wkleilem. Podalem Ci wszystko :P. Cala reszte ogarnalem. Zostal tylko wlasnie ten blad z tym ze po dodaniu tej petli znajduje za duzo slow niz powinno z pliku words.txt
P-177290
pekfos
» 2020-07-04 20:47:27
W drugim obiegu używasz tych samych zmiennych bez ponownej inicjalizacji. Cokolwiek znaczy "źle liczy" będzie pewnie wynikać z tego. Według prostej "reguły kciuka" zmienna powinna mieć możliwie mały zakres. Tworzenie masy zmiennych na początku programu to zła praktyka, zwłaszcza gdy nadajesz im nieopisowe nazwy.
P-177291
skupi967
Temat założony przez niniejszego użytkownika
» 2020-07-04 20:50:37
Rozumiem. Zatem jak unikac tworzenia tak duzej ilosci zmiennych? Co proponujesz?

Ps.
Czy jest jakis inny sposob na zmuszenie programu do otworzenia jakiegos pliku bez implementowania <windows.h>? Cos czytalem zeby tego unikac i szukac alternatyw
P-177292
pekfos
» 2020-07-04 20:59:19
Nie chodzi o ilość zmiennych, tylko o ich rozmieszczenie. Przykładowo to jest jedyne miejsce użycia zmiennej b:
C/C++
if( n != string::npos )
{
    do
    {
        tab[ b ] = n;
        b++;
        n = str.find( ',', n + 1 );
    } while( n != string::npos );
   
    str2 = str.substr( tab[ 3 ] + 1 );
    easy = stoi( str2 );
    str.resize( G );
    b = 0;
}
Więc powinno to wyglądać raczej tak:
C/C++
if( n != string::npos )
{
    int b = 0;
    do
    {
        tab[ b ] = n;
        b++;
        n = str.find( ',', n + 1 );
    } while( n != string::npos );
   
    str2 = str.substr( tab[ 3 ] + 1 );
    easy = stoi( str2 );
    str.resize( G );
}
Teraz od razu widać, ile wynosi b. Nie trzeba sprawdzać czy nie było to użyte gdzieś indziej i masz błędną w tym kontekście wartość, przez to że zerowałeś zmienną po użyciu, a nie przed.

Cos czytalem zeby tego unikac i szukac alternatyw
Cytat? ShellExecute() potrafi sporo rzeczy, więc do niektórych zastosowań mogą istnieć bezpośrednie rozwiązania, które będą działać lepiej. Np do uruchamiania procesów lepiej użyć CreateProcess(). W podanym kodzie chcesz wykonać operację powłoki i dokładnie do tego ta funkcja służy.
P-177293
skupi967
Temat założony przez niniejszego użytkownika
» 2020-07-04 21:30:08
Ok dzieki. Jestem wdzieczny za poswiecony czas.
P-177294
« 1 »
  Strona 1 z 1