简体   繁体   English

如何修复此 c++ 预期表达式错误?

[英]How do I fix this c++ expected expression error?

I am making something in c++, it doesn't have any errors visible in Visual Studio code, but when I use g++ to be able to execute it, I get this error:我在 c++ 中制作了一些东西,它在 Visual Studio 代码中没有任何可见的错误,但是当我使用 g++ 能够执行它时,我得到了这个错误:

In file included from Main.cpp:6: In file included from ./Filechange/Filechange.hpp:1: ./Filechange/Filechange.cpp:14:24: error: expected expression
    std::thread first ([&wtime,&f,&fn]() mutable {
                       ^ Main.cpp:16:33: error: expected expression
        OnFilechange("FileEvent", 0.5, [](char* txt){
                                       ^ 2 errors generated.

These are the files: Main.cpp:这些是文件: Main.cpp:

#include <lua.hpp>
#include <iostream>
#include <chrono>
#include <thread>
#include <stdio.h>
#include "Filechange/Filechange.hpp"

void wait(int seconds)
{
    std::this_thread::sleep_for(std::chrono::seconds(seconds));
}

int main(int argc, char const *argv[])
{
    lua_State *State = luaL_newstate();
    OnFilechange("FileEvent", 0.5, [](char* txt){
        std::cout << txt << std::endl;
    });
    lua_close(State);
    return 0;
}

Filechange.cpp:文件更改.cpp:

#include <thread>
#include <stdio.h>
#include <stdlib.h>
#include <chrono>
#include <string>
#include <fstream>

char* StringToChar(std::string str){
    char* Array = new char[str.length() + 1];
    strcpy(Array,str.c_str());
    return Array;
}
void OnFilechange(const char *f, float wtime, void (*fn)(char* txt)){
    std::thread first ([&wtime,&f,&fn]() mutable {
        std::ifstream file(f);
        std::string str;
        std::string filecontents;
        while (std::getline(file,str)){
            filecontents += str;
            filecontents.push_back('\n');
        }
        char* LastContents = StringToChar(filecontents);
        char* CurrentContents = StringToChar(filecontents);
        while (true){
            if (wtime != 0){
                std::this_thread::sleep_for(std::chrono::milliseconds(int(wtime*1000)));
            }
            filecontents = "";
            while (std::getline(file,str)){
                filecontents += str;
                filecontents.push_back('\n');
            }
            CurrentContents = StringToChar(filecontents);
            if (strcmp(LastContents, CurrentContents) != 0){
                LastContents = StringToChar(filecontents);
                fn(StringToChar(filecontents));
            }
        }
    });
}

Filechange.hpp:文件更改.hpp:

#include "Filechange.cpp"

#ifndef FILECHANGE_HPP 
#define FILECHANGE_HPP 

#include <thread>
#include <stdio.h>
#include <stdlib.h>
#include <chrono>
#include <string>
#include <fstream>

void OnFilechange(const char *f,float wtime,void (*fn)(char txt)); 
#endif

There's also a extension less file named FileEvent which will change in the runtime using other code files.还有一个名为 FileEvent 的无扩展名文件,它将在运行时使用其他代码文件进行更改。 The Filechange.cpp and Filechange.hpp are in a folder named "Filechange" Filechange.cpp 和 Filechange.hpp 位于名为“Filechange”的文件夹中

This function:这个功能:

void OnFilechange(const char *f, float wtime, void (*fn)(char* txt))

expects a function pointer, and a lambda in g++ is not implemented as a function pointer.需要一个函数指针,而 g++ 中的 lambda 未实现为函数指针。 Instead, you should declare the function to take a std::function , as in:相反,您应该将函数声明为采用std::function ,如下所示:

void OnFilechange(const char *f, float wtime, std::function<void(char *)> fn)

You may also need #include <functional> to get the declaration of std::function .您可能还需要#include <functional>来获取std::function的声明。

use -std=c++17 in g++ if possible as g++ defaulted to c++98如果可能,在 g++ 中使用 -std=c++17,因为 g++ 默认为 c++98

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM