需要帮助C++编译器和链接器错误消息

Need assistance C++ compiler and linker error messages

本文关键字:链接 错误 消息 编译器 帮助 C++      更新时间:2023-10-16

我一直在为我的大学作业编写程序,我几乎完成了,但我遇到了这个奇怪的错误,根本找不到解决方案。这只是程序中的一个函数。所以…它在这部分代码中抛出了一个错误。XOR运算符似乎是个问题。我曾尝试重命名"nesto"变量的名称,以防它和某些函数的名称相同,但并没有成功。请帮忙!想法?建议?

错误:对"(std::string{aka std::basic_string}((int&("的调用不匹配

void* ukupno(void* naziv){
    while(kraj!=1){
        sem_wait(&s_suma);
        for(int v=0;v<uk_buffer;v++) 
                nesto^= buffer(v);
        sem_post(&s_dohvati);   
        }
    }

这是整个代码:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <algorithm>
#include <pthread.h> 
#include <semaphore.h>
#include <signal.h>
#include <sys/wait.h>
using namespace std;
bool zastavica=1,kraj;
int uk_buffer,broj=0,nesto=0;
string buffer;

sem_t s_dohvati;
sem_t s_broji_rijeci;
sem_t s_suma;

void otvori_dat(string naziv){
    fstream dat;
    cout<<"naziv   " << naziv << endl;
    dat.open("naziv",ios::in);  
    }
void* dohvati(void* naziv){
    fstream dat;
    dat.open((char*)naziv,ios::in);
    if(!dat){
            cout<<"Greska kod otvaranja datoteke !!! " << endl;
            exit(-1);}
    kraj = false;
    while(!kraj){
                getline(dat,buffer);
                uk_buffer = buffer.length();
                if(dat.eof()) kraj = true;
                sem_post(&s_broji_rijeci);
                sem_post(&s_suma);
    if(kraj) sem_wait(&s_dohvati),sem_wait(&s_dohvati);
    }                               
    dat.close();
    }
void broji_txt(){ 
            for(int i=0;i<uk_buffer;i++)
                  if(isalnum(buffer[i])){
                        broj++;
                        while(isalnum(buffer[++i]));
                        }
                }        

void broji_html(){  for (int i=1;i<uk_buffer;i++)
                if (buffer[i-1]=='<'&&buffer[i]!='/')
                        broj++;
                        }

void* broji_rijeci(void* naziv){
    while(kraj!=1){
        sem_wait(&s_broji_rijeci);
            if(zastavica) broji_txt();
            else broji_html();
        sem_post(&s_dohvati);//postavljanje
        }
    }
void* ukupno(void* naziv){
    int nesto=0;
    while(kraj!=1){
        sem_wait(&s_suma);
        for(int v=0;v<uk_buffer;v++) 
                nesto^= buffer(v);
        sem_post(&s_dohvati);   
        }
    }
void analiza(char* naziv){
    pthread_t pt_dohvati, pt_broji_rijeci, pt_suma;
    sem_init (&s_dohvati,0,0);
    sem_init (&s_broji_rijeci,0,0);
    sem_init (&s_suma,0,0);
    pthread_create (&pt_dohvati,NULL,dohvati,(void*)naziv);     //zadnji parametar je ono što šaljem;
    pthread_create (&pt_broji_rijeci,NULL,broji_rijeci,NULL);
    pthread_create (&pt_suma, NULL, ukupno, NULL);
    pthread_join(pt_dohvati,NULL);
    pthread_join(pt_broji_rijeci,NULL);
    pthread_join(pt_suma,NULL);
    cout << "Datoteka " << naziv << " ima " << broj << "rijeci/tagova, zastitna suma je: " <<(unsigned int)nesto;
}

int main(int arg0 , char* arg1[]){
    char* pom;
    int br_arg = arg0-1;//po njemu se orijentiramo
    for(int k=1; k<=br_arg;k++){
        pom=strchr(arg1[k],'.');
        if(strcmp(pom,".txt") == 0)             zastavica=1;
        else if(strcmp(pom,".html") == 0)   zastavica=0;
        else cout<< "Datoteka " << arg1[k] << " nije podrzanog formata " <<  endl;
        switch(fork()){
                    case  0 : analiza(arg1[k]),exit(0);
                    case -1 : cerr<< "Pogreska pri stvaranju procesa" << endl;
                    default : continue;
                        }
                                }
            for(int i=0; i < br_arg ;i++)   wait (NULL);        
return 0;
}

错误消息告诉您,如果您得到的不是函数而是字符串,则无法使用函数调用语法。您可能指的不是buffer(v),而是buffer[v]。使用的括号类型很重要。

您的缓冲区是字符串

string buffer;

那么是什么

nesto^= buffer(v);

将缓冲区更改为向量数组或任何其他容器,因为您想对其进行索引。如果您想将缓冲区中的一个字母作为单个字符串,请执行:

nesto^= buffer[v];

您还没有提供足够的代码,但这个错误看起来没有的可见声明

buffer(v);

编辑

好的。现在我们可以看到了。尝试buffer[v]