#python #c
#python #c
Вопрос:
Я пытаюсь автоматически сгенерировать макет класса, используя gmock_gen.py скрипт на python 3.7.2.
вот my IController.h
файл
#include <iostream>
class Gui;
class IController
{
public:
virtual void display(Gui *gui) = 0;
virtual void count(int val) = 0;
};
Я создал скрипт на Python под названием controller.py
import os
filename = "IController.h"
file = open(filename,"r")
flag = False
header = []
classheader = ""
classbody = None
classitems = []
for line in file:
if(filename[:-2] in line):
flag = True
if flag == False:
header.append(line)
if filename[:-2] in line:
flag = True
classname = filename[1:-2]
line = line.replace("class ", "public ")
classbody = "class " classname " : " line
#print("class " header " : " line)
if "virtual" in line:
line = line.replace("virtual","")
line = line.replace(" = 0","")
classitems.append(line)
classbody = "n"
classbody = "{n"
classbody = " public:n"
for x in classitems:
classbody = x
classbody "n"
classbody = "};"
for x in header:
classheader = x
classheader = "#include " """ filename """ "nn"
classheader = classbody
f = open(filename[1:], "w")
f.write(classheader)
cppfilename = filename[1:-2] ".cpp"
f = open(cppfilename,"w")
mockfilename = "Mock" filename[1:]
print(filename)
print(mockfilename[:-2])
#os.system("python gmock_gen.py " filename " " mockfilename[:-2])
os.system("python gmock_gen.py " filename " " mockfilename[:-2])
Я получаю эту ошибку при запуске controller.py
в командной строке.
C:UsersrafaelDesktopCPP>controller.py
IController.h
MockController
Got exception in IController.h @ Token('class', 50, 55) []
Traceback (most recent call last):
File "C:UsersrafaelDesktopCPPcppast.py", line 706, in Generate
token = self._GetNextToken()
File "C:UsersrafaelDesktopCPPcppast.py", line 908, in _GetNextToken
return next(self.tokens)
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "gmock_gen.py", line 31, in <module>
gmock_class.main()
File "C:UsersrafaelDesktopCPPcppgmock_class.py", line 222, in main
lines = _GenerateMocks(filename, source, entire_ast, desired_class_names)
File "C:UsersrafaelDesktopCPPcppgmock_class.py", line 129, in _GenerateMocks
for node in ast_list:
File "C:UsersrafaelDesktopCPPcppast.py", line 720, in Generate
result = self._GenerateOne(token)
File "C:UsersrafaelDesktopCPPcppast.py", line 743, in _GenerateOne
return method()
File "C:UsersrafaelDesktopCPPcppast.py", line 1455, in handle_class
return self._GetClass(Class, VISIBILITY_PRIVATE, None)
File "C:UsersrafaelDesktopCPPcppast.py", line 1537, in _GetClass
body = list(ast.Generate())
RuntimeError: generator raised StopIteration
Что я делаю не так?
Комментарии:
1. Я не уверен насчет gmock_gen.py , но этот код не может быть проанализирован как C , поскольку
Gui
нигде не объявлен. Вероятно, вам нужно прямое объявление.2. я добавил прямое объявление, все та же проблема.
3. приведенный выше код работает с использованием Python версии 2.7.13